我正在学习来自WinForms开发的WPF。
我有一个TextChanged事件分配给我的WPF应用程序中的一个TextBox。如果用户输入了无效数据,我希望能够恢复到之前的文本值。
在旧的表单日,我会用OldValue替换NewValue,但似乎WPF的工作方式不同。
关于我能做到什么的任何想法都实现了这个目标?我只是不想用WPF吗?
感谢。
答案 0 :(得分:22)
你可以这两种方式:
收听PreviewTextInput
事件并设置e.Handled = true
以停止TextChanged事件。
使用WPF验证。有一个great post by Paul Stovell on Codeproject和一个recent post on his blog。
这些文章将帮助您入门。我第一次验证时遇到的一件事就是验证规则只在绑定更新源时运行。
答案 1 :(得分:3)
我会使用PreviewTextInput,WPF中的大多数事件都有预览兄弟。如果设置e.Handled = true,它将从bubbelig / tunneling进一步停止事件。
我不确定你是否意识到这一点,但预测事件据说是隧道效应,即。它们从最外面的容器开始,并在每个容器中发布,直到它到达具有焦点的控件。据说非预览事件是冒泡的,即。它们从焦点控制开始,并发布到每个父控件。
如果在最外层网格的PreviewTextChanged事件上设置e.Handled = true,则还会取消包括TextChanged在内的所有其他事件。首先,所有预览事件都会从最外层触发到具有焦点的控件,然后所有非预览事件都会从具有焦点的控件触发,并转到最外层的父控件。