我目前正在为我的文本框实施验证,并且不确定选择哪个事件,TextChanged
或PreviewTextInput
,因为似乎没有什么区别。
这些事件有何不同?
答案 0 :(得分:1)
摘录自框架文档:
UIElement.PreviewTextInput Event
PreviewTextInput事件允许组件或应用程序侦听 用于以与设备无关的方式输入文本。键盘是 PreviewTextInput的主要手段;但是语音,手写和其他 输入设备还可以生成PreviewTextInput。
由于组合键-在默认键盘中或通过 输入法编辑器-多个按键事件可能只会引发一个文本输入 事件。
此事件为 此类的TextCompositionManager.PreviewTextInput附加事件, 因此,当PreviewTextInput成为类成员列表的一部分时, UIElement被继承为基本元素。的事件处理程序是 附加到PreviewTextInput事件的附加到基础的 TextCompositionManager.PreviewTextInput附加事件并接收 同一事件数据实例。
对于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之前对其进行验证。
希望这对您有所帮助!