2012-07-06 120 views
5

我想擁有一個始終與當前集中控制綁定的屬性。有沒有辦法綁定到Keyboard.FocusedElement?

我已經看到了兩種獲得當前集中控制的方法。

一個使用Keyboard.FocusedElement。 第二個遍歷視覺樹。

因爲我想知道每次聚焦的元素髮生變化時,視覺樹遍歷好像會一直運行很多代碼。

但是Keyboard.FocusedElement沒有實現INotifyPropertyChanged。所以我不能正常地綁定它。

有沒有辦法讓它知道它何時發生變化?

(或者一些其他的方式有總是被設置到當前聚焦的控件的屬性?)

注:顯然,我可以添加一個事件到各控制並已將其更新屬性。但我有很多控制。我想避免給每個人添加一個事件。

回答

6

你可以嘗試訂閱Keyboard.GotKeyboardFocus Attached Event

當元素接收鍵盤焦點時發生。

以下是訂閱此事件OnStartup的示例。您可以使用附加的行爲來執行此操作,並更新可以綁定到的附加屬性。

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

這真是一個神話般的答案!非常感謝你指點我。 – Vaccano 2012-07-06 19:01:13

+0

當然,很高興我能夠幫助:) – 2012-07-06 19:06:25

相關問題