5

私は、WinForms 開発から WPF を学んでいます。

WPF アプリケーションの TextBox の 1 つに TextChanged イベントが割り当てられています。ユーザーが無効なデータを入力した場合、以前のテキスト値に戻せるようにしたいと考えています。

古いフォームの日には、NewValue を OldValue に置き換えましたが、WPF は同じようには機能しないようです。

これを達成するために何ができるかについてのアイデアはありますか? まだWPFを考えていないだけですか?

ありがとう。

4

2 に答える 2

23

これを行うには、次の 2 つの方法があります。

  1. イベントをリッスンし、TextChanged イベントを停止するようにPreviewTextInput設定します。e.Handled = true

  2. WPF 検証を使用します。Codeproject に関する Paul Stovell によるすばらしい投稿と、彼のブログ に関する最近の投稿があります。

それらの記事から始めましょう。最初に検証を行ったときに行き詰まったことの 1 つは、バインディングがソースを更新するときにのみ検証ルールが実行されることです。

于 2008-12-02T22:48:45.967 に答える
3

私はPreviewTextInputを使用しますが、WPFのほとんどのイベントにはプレビュー兄弟があります。e.Handled = trueを設定すると、イベントのbubbelig/tunnelingがさらに停止します。

あなたがそれを知っているかどうかはわかりませんが、プレビューイベントはトンネリングしていると言われています。それらは最も外側のコンテナから始まり、フォーカスのあるコントロールに到達するまですべてのコンテナに投稿されます。プレビュー以外のイベントは、バブリングと言われます。それらはフォーカスのあるコントロールから始まり、すべての親コントロールに投稿されます。

最も外側のグリッドのPreviewTextChangedイベントでe.Handled=trueを設定すると、TextChangedを含む他のすべてのイベントもキャンセルされます。最初に、すべてのプレビューイベントが最も外側からフォーカスのあるコントロールに発生し、次にすべての非プレビューイベントがフォーカスのあるコントロールから最も外側の親コントロールに発生します。

于 2008-12-02T23:08:39.343 に答える