我有ElementHost
中的UserControl。
它包含DataGrid
当用户按下Enter或双击时,将显示新窗口行(无模式),并且当该窗口关闭时,激活带有ElementHost的窗口。问题在于DataGrid失去了焦点。
Snoop向我展示了视觉树具有以下结构:
AdornerDecorator-> AvalonAdapter->我的UserControl。
Snoop显示激活后,AdornerDecorator具有属性
IsFocusable = false
IsFocused = false
IsKeyboardFocused = true
IsKeyboardFocusWithin = true
对我来说绝对是胡说八道。
当用户按下Tab键或箭头键时,第一个启用的UserControl元素将获得焦点。
我读过this post,但我对此不满意:
对于WPF和Windows窗体,焦点的工作原理有所不同,其中有些
我们无法修复的周围粗糙边缘。如果你有重点
在WindowsFormsHost中,并最小化/还原表单或显示
一个模式对话框,WindowsFormsHost内部的焦点可能会丢失–
WindowsFormsHost仍然具有焦点,但是其中的控件可能
不。
怎么办?放松和快乐?
而且非常令人失望的是无法在其他应用程序中重现该问题。
谁能解释这种奇怪行为的原因是什么?
可能提供一些解决方法。
最佳答案
这是一个已知的错误:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7d41218e-c2bb-4957-b0b4-aa24efc4d8c2/
但是不幸的是,连接的参考已死。
要解决此错误,我必须在ViewModel中添加IsVmFocused
属性,并创建我的FocusHelper.IsFocused
附加属性,该属性侦听元素的IsFocused
属性更改并绑定VM的属性。
您可以在以下(与任务相关的)SO问题中看到xaml:What is a Cached acessor in the context of DataBinding?