除了PreviewKeyDown, KeyDown, PreviewKeyUp 和KeyUp这4个事件之外,UIElement 对键盘输入还会发送另外两个事件。无论是单独按下某个键还是使用组合键,只要当控件收到某个输入文本,PreviewTextInput 和TextInput 事件就会触发。如果控件按下,但是并未导致键盘发送输入文本,那么这两个事件不会触发(例如回退键)。
下面是事件触发的序列:
-PreviewKeyDown – 隧道
-KeyDown – 冒泡
-PreviewTextInput – 隧道
-TextInput – 冒泡
-PreviewKeyUp – 隧道
-KeyUp – 冒泡
可以看到这两个事件发生在按键按下之后,在按键放开之前
请注意一些接收文本并要做某些操作的控件可能会通过其设置为已处理来阻止TextInput 事件。例如,TextBox 控件获得了某些文本输入并将之添加到输入框中,因此它会设置TextInput 事件为已处理,阻止其继续路由。它的意思是TextBox 已经收到了文本,不需要事件再继续传递给其它的任何控件了。
原文地址:https://wpf.2000things.com/2012/08/22/630-previewtextinput-and-textinput-events/