2008-12-02 104 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爲好。首先,所有預覽事件都從焦點的最外層到控件被觸發,然後所有非預覽事件從焦點控件中被觸發,並被傳遞到最外層的父控件。