2008-12-02 105 views
4

我正在学习来自WinForms开发的WPF过程。取消WPF文本框更改事件

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

在旧的表格当天,我会用OldValue取代NewValue,但看起来WPF的工作方式不同。

关于我能做到的任何想法都可以做到这一点?我只是没有用WPF思考?

谢谢。

回答

20

你可以这样做两种方式:

  1. PreviewTextInput事件,并e.Handled = true停止TextChanged事件。

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

这些文章会让你开始。在我第一次进行验证时遇到的一件事是验证规则仅在绑定更新源时运行。

+1

它的PreviewTextInput不是PreviewTextChanged! – GuruC 2011-07-05 11:14:21

+2

如果用户将一些文本粘贴到文本框中,则不会触发PreviewTextInput。 – Abhi 2012-04-10 08:33:45

3

我会使用PreviewTextInput,WPF中的大多数事件都有一个Preview兄弟。如果将e.Handled设置为true,则会进一步阻止bubbelig/tunneling事件。

我不确定你是否知道它,但预览事件据说是隧道,即。他们从最外层的容器开始,并将其发布到每个容器中,直到达到具有焦点的控件。非预览事件被称为bubbeling,即。他们从焦点控制开始,并发布给每个家长控制。

如果设置e.Handled =在最外面的网格的PreviewTextChanged事件属实,取消所有其他活动,包括框TextChanged为好。首先,所有预览事件都从焦点的最外层到控件被触发,然后所有非预览事件从焦点控件中被触发,并被传递到最外层的父控件。