【发布时间】:2011-05-19 21:14:17
【问题描述】:
我试图在我的 WPF 应用程序中的任何位置捕获按键事件,无论哪个 UI 元素具有焦点。目前我没有运气。谁能建议一些我可能没有尝试过的策略?或者,理想情况下,提供类似“哦,这很简单,你就这样做”这样的答案。
它是一个分布式应用程序,它有一个聊天系统。我正在寻找的效果是用户可以随时开始输入聊天消息,而无需切换到标准聊天框。我将使用 FormattedText 对象自己在应用程序中显示他们的消息。这很重要,因为这意味着应用程序中的任何地方都没有文本输入元素。
我的 XAML 结构大致如下:
<MainWindow>
<Canvas 1>
<Canvas 2>
<Image 1 />
</Canvas 2>
<Image 2 />
</Canvas 1>
</MainWindow>
我以编程方式将元素添加到 Canvas 2 中,并操作 Image 2,这就是它具有这种结构的原因。
我尝试将 KeyDown、KeyUp 和 Preview 事件添加到 MainWindow 和 Canvas 1,但它们似乎都没有触发(我检查断点)。我也在这里阅读了另一个相关问题后,尝试在 Loaded() 方法中手动将焦点设置在主窗口上。
我知道这个网站上有很多相关的问题,但他们没有帮助我,因为:
- 没有任何答案(我的问题会得到解答吗?)
- 他们假设一个文本输入小部件并且对冒泡事件感兴趣
- 他们希望为少量键绑定键 - 我想捕获任何键
- 他们有兴趣在捕获事件后检测 control/shift/alt 键是否按下
感谢您花时间阅读我冗长的帖子,并感谢您的建议。
更新(在 Rachel 的评论之后)当我放入一个 TextBox 并将焦点设置到 TextBox 时,将触发 MainWindow 级别的一个键事件方法。这样就可以像宣传的那样工作了。
但是,我真的希望应用程序中根本没有显式的文本输入小部件。我希望用户能够开始输入来撰写消息。
【问题讨论】:
-
在这里也可以看到我的回答:stackoverflow.com/a/42484932/2025364