取消WPF TextBox已更改事件

时间:2008-12-02 19:27:12

标签: c# .net wpf textbox

我正在学习来自WinForms开发的WPF。

我有一个TextChanged事件分配给我的WPF应用程序中的一个TextBox。如果用户输入了无效数据,我希望能够恢复到之前的文本值。

在旧的表单日,我会用OldValue替换NewValue,但似乎WPF的工作方式不同。

关于我能做到什么的任何想法都实现了这个目标?我只是不想用WPF吗?

感谢。

2 个答案:

答案 0 :(得分:22)

你可以这两种方式:

  1. 收听PreviewTextInput事件并设置e.Handled = true以停止TextChanged事件。

  2. 使用WPF验证。有一个great post by Paul Stovell on Codeproject和一个recent post on his blog

  3. 这些文章将帮助您入门。我第一次验证时遇到的一件事就是验证规则只在绑定更新源时运行。

答案 1 :(得分:3)

我会使用PreviewTextInput,WPF中的大多数事件都有预览兄弟。如果设置e.Handled = true,它将从bubbelig / tunneling进一步停止事件。

我不确定你是否意识到这一点,但预测事件据说是隧道效应,即。它们从最外面的容器开始,并在每个容器中发布,直到它到达具有焦点的控件。据说非预览事件是冒泡的,即。它们从焦点控制开始,并发布到每个父控件。

如果在最外层网格的PreviewTextChanged事件上设置e.Handled = true,则还会取消包括TextChanged在内的所有其他事件。首先,所有预览事件都会从最外层触发到具有焦点的控件,然后所有非预览事件都会从具有焦点的控件触发,并转到最外层的父控件。