2012-07-06 60 views
5

Şu anda odaklanmış olan kontrole daima bağlı bir özelliğe sahip olmak isterim.Keyboard.FocusedElement öğesine bağlamanın bir yolu var mı?

Şu anda odaklanmış kontrolü elde etmenin iki yolunu gördüm.

Birisi Keyboard.FocusedElement kullanıyor. İkincisi görsel ağacı geçiyor.

Odaklanan öğenin değiştiği her seferinde görsel ağaç geçişini her defasında bilmek istediğimden beri her zaman çok fazla kod çalıştıracak gibi görünüyor.

Ancak Keyboard.FocusedElement, INotifyPropertyChanged uygulamıyor. Bu yüzden normalde bağlayamıyorum.

Değiştiğinde bana haber vermenin bir yolu var mı?

(Ya başka bir yolu her zaman şu anda kontrolünü odaklı olarak ayarlanmış bir özelliği var mı?)

NOT: Açıkçası ben her kontrolün üzerine bir etkinlik eklemek olabilir ve bir özelliği güncelleştirmek var . Ama çok kontrolüm var. Her birine bir olay eklemekten kaçınmak istiyorum.

cevap

6

Bir eleman klavye odağı aldığında gerçekleşir Keyboard.GotKeyboardFocus Attached Event

abone deneyebilirsiniz.

İşte bu etkinliğe OnStartup'a abone olan bir örnek. Bunu yapan ekli bir davranışı kullanabilir ve örneğin bağlayabileceğiniz ekli bir özelliği güncelleştirebilirsiniz.

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     EventManager.RegisterClassHandler(typeof(UIElement), 
      Keyboard.GotKeyboardFocusEvent, 
      new RoutedEventHandler(Keyboard_GotKeyboardFocus), true); 

     base.OnStartup(e); 
    } 

    private void Keyboard_GotKeyboardFocus(object sender, RoutedEventArgs e) 
    { 
     Debug.WriteLine(e.OriginalSource); 
    } 
} 
+1

Bu gerçekten muhteşem bir cevaptı! Bana bunu söylediğin için çok teşekkür ederim. – Vaccano

+0

Elbette, yardım edebildiğime sevindim :) –

İlgili konular