5

我正在开发一个 WPF 应用程序,使用 Windows 8 作为具有 .NET 4.5 的开发人员机器。我还使用了一些 DevExpress 控件。

在开发人员机器上,应用程序的 UI 会正常响应。

当我在 Windows 7 上测试应用程序时,无论是使用虚拟机还是其他 PC,都会显示 UI,但它没有正常响应。例如,我有一个 DevExpress 网格控件,当我单击一行时,该行没有突出显示为选中,当鼠标悬停按钮和菜单时,也没有任何反应。

当我按下 CTRL 键时,魔法就开始了!之后,WPF 应用程序会正常响应,就像在 Windows 8 上一样。

我想当我按下那个键时,会发生一些与 Focus 有关的事情。同样,当调整窗口大小时,网格上的更改也会出现,但在它再次“冻结”之后。只有按CTRL,问题就消失了。

任何想法为什么会这样?

非常感谢

4

1 回答 1

0

这是从 WinForms 应用程序创建 WPF 窗口时的标准行为。幸运的是,Interop 包还包含一个解决这种奇怪问题的方法:ElementHost.EnableModelessKeyboardInterop. 创建 WPF 窗口之后,但在调用其 Show 方法之前,请执行以下操作:

public static void SetOwnerAndMakeTheKeyboardWork(this Window window, IntPtr ownerHandle)
{
    if (ownerHandle != IntPtr.Zero)
        new WindowInteropHelper(window).Owner = ownerHandle;
    ElementHost.EnableModelessKeyboardInterop(window);
}
于 2015-01-19T00:30:52.077 回答