cap*_*aig 19 keyboard wpf events
我在窗口处理PreviewTextInput事件以处理来自磁卡读卡器的滑动.我在窗口上处理事件,因此无论哪个控件都集中在哪里都无关紧要.
一旦处理程序确定滑动已启动(输入'%'或';'字符),它将处理所有事件,直到滑动完成.该系统通常运行良好,但有一些重要的例外:
当从阅读器输入空格字符(可能还有\n字符)时,它们不会被PreviewTextInput处理,而是直接发送到任何聚焦的控件中.奇怪的是,处理程序确实接收\ r \n字符.这会导致不良行为.
我想要的是一种在窗口级别捕获所有关键事件的方法,并且如果我愿意,还有机会处理它们.我尝试过使用PreviewKeyDown,发现使用它有点麻烦,并从中获取char值.PreviewTextInput更好,因为我可以简单地读取Text属性.
是否有一个原因PreviewTextInput不处理某些字符?是否有任何类似的方法来获取所有事件,包括空格?
sin*_*law 12
我在这个WPF论坛问题中找到了某种解释:
因为一些IME会将空白击键视为文本合成过程的一部分,这就是Avalon通过TextInput事件报告正确的合成文本的原因.
以及来自TextInput事件的MSDN文档的更多信息:
...对于键盘输入,WPF首先发送相应的KeyDown/KeyUp事件.如果未处理这些事件且键是文本的(而不是方向箭头或功能键等控制键),则会引发TextInput事件.KeyDown/KeyUp和TextInput事件之间并不总是简单的一对一映射,因为多次击键可以生成单个字符的文本输入,单击键可以生成多字符串.对于使用输入法编辑器(IME)在其相应字母表中生成数千个可能字符的中文,日文和韩文等语言尤其如此.
当WPF发送KeyUp/KeyDown事件时,如果击键可能成为TextInput事件的一部分(例如,如果按下ALT + S),则Key被设置为Key.System.这允许KeyDown事件处理程序中的代码检查Key.System,如果找到,则保留对随后引发的TextInput事件的处理程序的处理.在这些情况下,TextCompositionEventArgs参数的各种属性可用于确定原始击键.类似地,如果IME处于活动状态,则Key具有Key.ImeProcessed的值,而ImeProcessedKey则提供原始击键或击键.
顺便说一句,这是两个相关的问题:
| 归档时间: |
|
| 查看次数: |
10996 次 |
| 最近记录: |