【发布时间】:2018-10-09 19:30:22
【问题描述】:
我目前正在对我的文本框进行验证,但我不确定要选择哪个事件,TextChanged 或 PreviewTextInput,因为似乎没有区别。
这些事件有何不同?
【问题讨论】:
我目前正在对我的文本框进行验证,但我不确定要选择哪个事件,TextChanged 或 PreviewTextInput,因为似乎没有区别。
这些事件有何不同?
【问题讨论】:
框架文档摘录:
UIElement.PreviewTextInput Event
PreviewTextInput 事件允许组件或应用程序监听 用于以与设备无关的方式输入文本。键盘是 PreviewTextInput 的主要方式;但语音、笔迹和其他 输入设备也可以生成 PreviewTextInput。
由于组合键——无论是在默认键盘中还是通过 输入法编辑器——多个按键事件可能只引发一个文本输入 事件。
此事件为 此类的 TextCompositionManager.PreviewTextInput 附加事件, 这样 PreviewTextInput 是类成员列表的一部分 UIElement 作为基本元素继承。事件处理程序是 附加到 PreviewTextInput 事件被附加到底层 TextCompositionManager.PreviewTextInput 附加事件并接收 相同的事件数据实例。
对于TextBox,该事件在其文本发生变化时发生;为一个 RichTextBox,当任何内容或格式发生变化时发生此事件 (例如,图像、表格或背景颜色)。
我的 2 美分:
这两个事件之间有很大的不同。 TextChanged 事件将在文本框处理文本并更新控件后执行。另一方面,PreviewTextInput 事件将在您关注文本框并在输入设备(例如键盘)上执行操作时执行,甚至在文本框对来自设备的即将输入有任何想法之前。
【讨论】:
PreviewTextInput 事件在“TextBox 以与设备无关的方式获取文本时”被触发。 PreviewTextInput(类型为TextCompositionEventArgs)的事件参数的文本属性将只包含最后一个输入操作的文本。在键盘输入的情况下,这很可能是一键按下,因此只有一个字符。其他输入方法,例如语音输入,一次可以输入多个字符。
TextChanged 事件查看TextBox 的Text 属性,并在其文本发生任何变化时发生。它的事件参数类型为TextChangedEventArgs,具有TextChange 对象的集合,其中包含有关已进行更改的信息。
至于你应该选择哪个进行验证,答案是......都不。由于您希望验证,我只能假设您将在项目的其他地方使用输入的文本。在 WPF 中,首选MVVM(即模型、视图、视图模型)架构,这意味着我们使用Bindings 进行输入。在 MVVM 中验证TextBox 的文本有多种方法,我首选的方法是IDataErrorInfo 接口和Binding Validation Rules。前者在文本数据发送到 ViewModel 后执行验证,后者将在文本推送到 ViewModel 之前验证文本。
希望对你有所帮助!
【讨论】: