4

我有 UserControl,它在ElementHost.
它包含DataGrid
当用户按下回车键或双击行时显示新窗口(无模式),并且当该窗口关闭时,带有 ElementHost 的窗口将重新激活。问题是 DataGrid 失去焦点。

Snoop 向我展示了可视化树具有以下结构:

AdornerDecorator -> AvalonAdapter -> 我的用户控件。
Snoop 显示激活后 AdornerDecorator 有属性

IsFocusable = false
IsFocused = false
IsKeyboardFocused = true
IsKeyboardFocusWithin = true

什么对我来说绝对是胡说八道。
当用户点击 Tab 或箭头键时,第一个启用的 UserControl 元素获得焦点。

我读过这篇文章,但我对此并不满意:

对于 WPF 和 Windows 窗体,Focus 的工作方式不同,这里有一些我们无法修复的粗糙边缘。如果您在 WindowsFormsHost 中具有焦点并且最小化/恢复表单或显示模式对话框,则 WindowsFormsHost 中的焦点可能会丢失 - WindowsFormsHost 仍然具有焦点,但其中的控件可能没有。

怎么办?放松和快乐?
非常令人失望的是无法在其他应用程序中重现该问题。

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

4

1 回答 1

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?

于 2013-01-23T17:24:10.687 回答