Windows 7 上的 WPF 应用程序只有在按下 CTRL 键后才能正常响应

Posted

技术标签:

【中文标题】Windows 7 上的 WPF 应用程序只有在按下 CTRL 键后才能正常响应【英文标题】:WPF application on Windows 7 responds normally only after pressing CTRL key 【发布时间】:2013-11-24 10:13:38 【问题描述】:

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

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

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

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

我猜当我按下那个键时,会发生一些与 Focus 有关的事情。 此外,当调整窗口大小时,网格上的更改也会出现,但在它再次“冻结”之后。只有按 CTRL 才能解决问题。

你知道为什么会这样吗?

非常感谢

【问题讨论】:

你能在只包含 DevExpress 网格控件的新 WPF 项目中重新创建问题吗? 我会用一个新项目来测试它,谢谢 使用来自 DevExpress 模板的新项目,仅包含功能区和网格控件可以正常工作... 听起来有点像在虚拟机上运行它。 删除主窗口 xaml 文件中的 Windows 窗体主机后问题解决!顺便说一句,非常奇怪的行为...... 【参考方案1】:

这是从 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);

【讨论】:

以上是关于Windows 7 上的 WPF 应用程序只有在按下 CTRL 键后才能正常响应的主要内容,如果未能解决你的问题,请参考以下文章

WPF 在 Windows XP 和 Windows 7 上的呈现方式不同

WPF 的 Windows 7 主题?

让 WPF 应用程序看起来像 Metro 风格,即使在 Windows 7 中? (窗口 Chrome / 主题 / 主题)

Wpf TextBox上的键盘小数分隔符,如何?

无法在 Windows 7 上的 Windows 服务中使用 netNamedPipeBinding 托管和启动 WCF 服务

STM32F4程序只有在按下复位按钮后才会运行