WPF TextCompositionManager相关事件

TextCompositionManager中有六个附加事件:

  • PreviewTextInputStartEvent
  • TextInputStartEvent
  • PreviewTextInputUpdateEvent
  • TextInputUpdateEvent
  • PreviewTextInputEvent
  • TextInputEvent

我写了一个只包含一个TextBox和相关事件处理器的Demo测试了这六个事件发生的时机

当通过键盘,输入普通的字符时会依次调用:
TextBox_PreviewTextInputStart
TextBox_TextInputStart
TextBox_PreviewTextInput
且在这三个方法中,TextBoxText属性内容为输入之前的。
在e.TextComposition.Text内包含输入的字符。
TextInput事件不会发生,已经被TextBox内部处理。

 当通过输入法或Alt+小键盘输入字符时,会依次调用:
TextBox_PreviewTextInputStart
TextBox_TextInputStart
TextBox_PreviewTextInputUpdate
TextBox_TextInputUpdate
TextBox_PreviewTextInput
相比直接输入,多调用了TextBox_PreviewTextInputUpdateTextBox_TextInputUpdate。
通过Alt+小键盘输入时,每按小键盘一次会相应调用一次 TextBox_PreviewTextInputUpdateTextBox_TextInputUpdate。
当通过输入法输入时,会在 TextBox_PreviewTextInputUpdateTextBox_TextInputUpdate中的e.TextComposition.CompositionText包含输入的字符,Alt+小键盘不包含。即使通过反射强行修改该属性,并不会影响用户输入。如果需要修改输入,可以将该事件标为已处理,然后通过TextCompositionManager.StartComposition(new TextComposition(InputManager.Current, TextBox, ""))重新模拟输入。
只有TextBox_PreviewTextInpute.TextComposition.Text内包含输入的字符,其他方法均不包含。 

Posted in WPF

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据