在ElementHost中托管UserControl的奇怪焦点问题

时间:2013-01-23 13:31:54

标签: wpf focus elementhost

我有一个用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仍然具有焦点,但它内部的控件可能   不

现在怎样?放松心情,快乐吗? 非常令人失望的是无法在其他应用程序中重现该问题。

任何人都可以解释这种奇怪行为的原因是什么? 可能会提供一些解决方法。

1 个答案:

答案 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?