我有一个用ElementHost
封锁的UserControl
它包含DataGrid
当用户按下输入或双击行时,将显示新窗口(无模式),当该窗口关闭时,将激活返回带有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仍然具有焦点,但它内部的控件可能 不
现在怎样?放松心情,快乐吗? 非常令人失望的是无法在其他应用程序中重现该问题。
任何人都可以解释这种奇怪行为的原因是什么? 可能会提供一些解决方法。
答案 0 :(得分:2)
这是一个众所周知的错误:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7d41218e-c2bb-4957-b0b4-aa24efc4d8c2/
但不幸的是,连接的提法已经死了。
要解决此错误,我必须将IsVmFocused
属性添加到我的ViewModel,并创建我的FocusHelper.IsFocused
附加属性,该属性侦听元素的IsFocused
属性更改并绑定VM的属性。
你可以在这个(任务相关的)SO问题中看到xaml:What is a Cached acessor in the context of DataBinding?