C#WPF TextChanged和PreviewTextInput之间的文本框区别

时间:2018-10-09 19:30:23

标签: wpf events

我目前正在为我的文本框实施验证,并且不确定选择哪个事件,TextChangedPreviewTextInput,因为似乎没有什么区别。

这些事件有何不同?

2 个答案:

答案 0 :(得分:1)

摘录自框架文档:

UIElement.PreviewTextInput Event

  

PreviewTextInput事件允许组件或应用程序侦听   用于以与设备无关的方式输入文本。键盘是   PreviewTextInput的主要手段;但是语音,手写和其他   输入设备还可以生成PreviewTextInput。

     

由于组合键-在默认键盘中或通过   输入法编辑器-多个按键事件可能只会引发一个文本输入   事件。

     

此事件为   此类的TextCompositionManager.PreviewTextInput附加事件,   因此,当PreviewTextInput成为类成员列表的一部分时,   UIElement被继承为基本元素。的事件处理程序是   附加到PreviewTextInput事件的附加到基础的   TextCompositionManager.PreviewTextInput附加事件并接收   同一事件数据实例。

TextBoxBase.TextChanged Event

  

对于TextBox,此事件在其文本更改时发生;为一个   RichTextBox,任何内容或格式更改时都会发生此事件   (例如图像,表格或背景色)。

我的2美分:

这两个事件之间存在很大差异。 TextChanged事件将在文本框处理完文本并更新控件后执行。另一方面,当您专注于文本框并在输入设备(例如键盘)上执行操作之前,将执行PreviewTextInput事件,甚至在文本框不知道有关设备即将输入的信息之前。

答案 1 :(得分:0)

TextBox以与设备无关的方式获取文本时,会触发PreviewTextInput事件。 PreviewTextInput(类型为TextCompositionEventArgs)的事件参数的text属性将仅包含最后一个输入操作的文本。对于键盘输入,这很可能是一次按键,因此只有一个字符。其他输入法(例如语音输入)可以一次输入多个字符。

TextChanged事件将查看Text的{​​{1}}属性,并在其文本以任何方式更改时发生。其事件参数的类型为TextBox,具有TextChangedEventArgs对象的集合,这些对象包含有关已进行的更改的信息。

对于您应该选择进行验证的答案是... 都不是。由于您希望进行验证,因此我只能假设您将在项目的其他位置使用输入的文本。在WPF中,首选MVVM(即Model,View,ViewModel)体系结构,这意味着我们使用Bindings作为输入。验证MVVM中的TextChange的文本有多种方法,我的首选方法是IDataErrorInfo接口和Binding Validation Rules。前者在将文本数据发送到ViewModel之后执行验证,而后者将在将文本推送到ViewModel之前对其进行验证。

希望这对您有所帮助!