Vac*_*ano 5 .net c# wpf binding focus
我想拥有一个始终绑定到当前焦点控件的属性.
我已经看到了两种获得当前焦点控制的方法.
一个是使用Keyboard.FocusedElement.第二个是遍历可视树.
因为我想知道每次聚焦元素改变时,可视化树遍历似乎总是会运行大量代码.
但是Keyboard.FocusedElement没有实现INotifyPropertyChanged.所以我不能正常绑定它.
有没有办法让它在变化时让我知道?
(或者其他一些方法可以将属性设置为当前聚焦的控件?)
注意:显然,我可以在每个控件上添加一个事件,并让它更新属性.但我有很多控制权.我想避免将事件附加到每个人身上.
您可以尝试订阅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)
归档时间: |
|
查看次数: |
813 次 |
最近记录: |