在触发KeyDown事件之前,Windows吞下WIN + DirectionKey组合

时间:2014-04-23 09:23:00

标签: c# wpf windows borderless

尽管将 ResizeMode 设置为 CanMinimize ,我的窗口必须尽可能正常地遵循Windows 7标准。

我承认这条路线的意义不强,但这是我知道在无边框/无边框的父窗口中托管非WPF内容(WinFormsHost等)的唯一方法之一( AllowTransparency(传统方式)通常会与它发生冲突(导致它根本不渲染))。

考虑到这一点,我已经为窗口编写了我自己的调整大小和手势代码(对齐,当拖到顶部时最大化等),这一切都非常出色。

我会得到用户从WinKey + Direction获得的预期行为(左右按住窗口向左或向右,而向上最大化它,向下将其恢复到正常大小)也没有任何困难,但是它似乎是系统在它到达应用程序之前吞下这个特定的组合。当按下方向OR窗口键时,事件被适当地触发,但组合不会触发它。

因此,我的问题是:是否可以在相对普通的WPF应用程序中对此组合作出反应,而无需将键盘挂钩插入系统?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

根据Gustavo Cavalcanti's answer找到similar question的解决方案。 应用程序现在正在捕获各个按键事件,我可以确定键盘状态并在按下箭头键时相应地操作(通过检查LWin / RWin和带有 Keyboard.IsKeyDown 的箭头)。

现在这是一个不错的解决方案,但它与Windows的正常功能并不完全匹配,因为在用户按下箭头键而不是释放箭头键时,预计窗口会移动/停靠。

所有相同,总比没有好,开箱即用,只需要最少的额外代码,没有其他依赖/库。仍然欢迎优秀的解决方案,我不会将此答案标记为解决方案,因为问题尚未得到全面解决。