2009-05-16 18 views
19

Enter tuşuna basmak istiyorum Benim WPF uygulamasının tümünde Sekme tuşunu kullan, yani, Kullanıcı bastığımda uygulamamın her yerinde Enter düğmesine odaklanıldığında, bir sonraki odaklanabilir kontrole odaklanmak istiyorum. Uygulama yaşam döngüsünde bunu yapmanın bir yolu var mı? Birisi bana bir örnek verebilir mi?
Çok teşekkürler!
Yorumlama sekmesi olarak girin WPF

+1

BabySmash bazı Klavye i Karşılıklı sorun odağı bir düğmeye geldiğinde, ben komut çalıştırmak ve üzerinde taşımak istediğiniz olmasıdır – bendewey

cevap

35

İsterseniz, EnterKeyTraversal attached property kodumu kullanabilirsiniz. WPF penceresinde üst düzey kaba ekleyin ve içindeki her şey sekme olarak girmek görür:

<StackPanel my:EnterKeyTraversal.IsEnabled="True"> 
    ... 
</StackPanel> 
+0

geçersiz kılmaları kullanır sonraki sekme dizini. Bunu yapabilmek mümkün mü?? –

0

woodyiii, sonra da olabilir, onun işlevini bilmek adıyla PredictFocus() denilen UIElement bir işlevi yoktur Bu öğenin etkinleştirilip etkinleştirilmediğini kontrol edin veya odağı hareket ettirmek için değil ...

3

Bazı elemanlara (düğmeler, combobox'lar) FrameworkElement.Tag (değeri IgnoreEnterKeyTraversal) ekleyerek woodyiii'nin sorununu çözdüm veya XAML'mdeki enter tuşu geçişini yok saymak istediğim bir şey var). Daha sonra ekli özellikte bu etiketi & değeri için aradım. böylece gibi:

if (e.Key == Key.Enter) 
    { 
     if (ue.Tag != null && ue.Tag.ToString() == "IgnoreEnterKeyTraversal") 
     { 
      //ignore 
     } 
     else 
     { 
      e.Handled = true; 
      ue.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); 
     } 
    } 
+0

Bunu "KeyDown" etkinliğinde yaptığınızdan ve "PreviewKeyDown" uygulamasında yapmadığınızdan emin olun. Ayrıca, 'u' ın ne olduğunu belirtmiyorsunuz ama en azından benim için 'e.Source' olması gerekiyor. – Conrad

+1

Bu iyi. Tag = "IgnoreEnterKeyTraversal" varsa TextBox üzerinde çalışır, ancak aynı şeyi IsEditable = "true" ile ComboBox'ta istiyorum. Bu senaryoda numaranız işe yaramaz. Bana bunu nasıl yapabilirim söyler misin? – Vishal

4

projenin bütünü değiştirmek için, App.xaml.cs bu

  • yapmanız gerekir:

    protected override void OnStartup(StartupEventArgs e) 
    {   
        EventManager.RegisterClassHandler(typeof(Grid), Grid.PreviewKeyDownEvent, new KeyEventHandler(Grid_PreviewKeyDown)); 
        base.OnStartup(e); 
    } 
    
    private void Grid_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e) 
    { 
        var uie = e.OriginalSource as UIElement; 
    
        if (e.Key == Key.Enter) 
        { 
         e.Handled = true; 
         uie.MoveFocus(
         new TraversalRequest(
         FocusNavigationDirection.Next)); 
        } 
    } 
    
  • derleme'yi. Ve bitti. Şimdi gir gibi sekmeyi kullanabilirsiniz. Not: kılavuzunda elementler için Bu çalışma Scott Hanselman'ın tarafından