有没有办法绑定到Keyboard.FocusedElement?

Vac*_*ano 5 .net c# wpf binding focus

我想拥有一个始终绑定到当前焦点控件的属性.

我已经看到了两种获得当前焦点控制的方法.

一个是使用Keyboard.FocusedElement.第二个是遍历可视树.

因为我想知道每次聚焦元素改变时,可视化树遍历似乎总是会运行大量代码.

但是Keyboard.FocusedElement没有实现INotifyPropertyChanged.所以我不能正常绑定它.

有没有办法让它在变化时让我知道?

(或者其他一些方法可以将属性设置为当前聚焦的控件?)

注意:显然,我可以在每个控件上添加一个事件,并让它更新属性.但我有很多控制权.我想避免将事件附加到每个人身上.

Fre*_*lad 6

您可以尝试订阅Keyboard.GotKeyboardFocus附加事件

在元素接收键盘焦点时发生.

这是一个订阅此事件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);
    }
}
Run Code Online (Sandbox Code Playgroud)