5

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

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

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

关于我能做到这一点的任何想法?我只是还没有考虑 WPF 吗?

谢谢。

4

2 回答 2

23

您可以通过以下两种方式执行此操作:

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

  2. 使用 WPF 验证。Paul Stovell 在 Codeproject 上有一篇很棒的文章,最近在他的博客上也有一篇文章。

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

于 2008-12-02T22:48:45.967 回答
3

我会使用 PreviewTextInput,WPF 中的大多数事件都有一个 Preview 兄弟。如果您设置 e.Handled = true 它将阻止事件进一步冒泡/隧道。

我不确定您是否知道,但据说预览事件是隧道,即。它们从最外面的容器开始,并发布在每个容器中,直到它到达具有焦点的控件。非预览事件被称为冒泡,即。它们从具有焦点的控件开始,并发布到每个父控件。

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

于 2008-12-02T23:08:39.343 回答