TextCompositionManager中有六个附加事件:
- PreviewTextInputStartEvent
- TextInputStartEvent
- PreviewTextInputUpdateEvent
- TextInputUpdateEvent
- PreviewTextInputEvent
- TextInputEvent
我写了一个只包含一个TextBox和相关事件处理器的Demo测试了这六个事件发生的时机
当通过键盘,输入普通的字符时会依次调用:TextBox_PreviewTextInputStart
TextBox_TextInputStart
TextBox_PreviewTextInput
且在这三个方法中,TextBox
的Text
属性内容为输入之前的。 在e.TextComposition.Text
内包含输入的字符。TextInput
事件不会发生,已经被TextBox
内部处理。 当通过输入法或Alt+小键盘输入字符时,会依次调用:TextBox_PreviewTextInputStart TextBox_TextInputStart
TextBox_PreviewTextInputUpdate
TextBox_TextInputUpdate
TextBox_PreviewTextInput
相比直接输入,多调用了TextBox_PreviewTextInputUpdate
和TextBox_TextInputUpdate
。 通过Alt+小键盘输入时,每按小键盘一次会相应调用一次TextBox_PreviewTextInputUpdate
和TextBox_TextInputUpdate
。 当通过输入法输入时,会在TextBox_PreviewTextInputUpdate
和TextBox_TextInputUpdate
中的e.TextComposition.CompositionText
包含输入的字符,Alt+小键盘不包含。即使通过反射强行修改该属性,并不会影响用户输入。如果需要修改输入,可以将该事件标为已处理,然后通过TextCompositionManager.StartComposition(new TextComposition(InputManager.Current, TextBox, ""))
重新模拟输入。 只有TextBox_PreviewTextInput
的e.TextComposition.Text
内包含输入的字符,其他方法均不包含。