3

WPFアプリにいくつかの検証を設定したテキストボックスがいくつかあります。

ロード時に、アプリはWPFウィンドウのコントロールがバインドされているクラスを逆シリアル化します。

たとえば、ファイルが存在することをテストするValidationRuleがあります。ValidatesOnTargetUpdatedを設定しない場合、(バインドされた)テキストプロパティを変更すると、対応するTextBoxが検証され、(デフォルトの)赤い境界線が表示され、ツールチップ({Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent})にエラーメッセージが表示されます。

コントロールがpropertychangedではなくバインディングで検証するようにしたいので、ValidatesOnTargetUpdatedをtrueに設定し、デバッグ時にvalidationRuleが起動することを確認できます。

ValidatesOnTargetUpdated="True"私の問題は、ValidationRuleが起動しているにもかかわらず、(デフォルトの)ValidationTemplateが無視されることです。

ツールチップが表示されます。正しいエラーメッセージが表示されますが、境界線が赤で表示されません。これは無視されているようです。

なぜこれが起こるのか、何か考えはありますか?

4

1 に答える 1

2

このフォーラムの投稿を読むことをお勧めします。私はあなたの状況に関係する部分は次のとおりだと思います:

問題:ページを読み込んだときにエラーテンプレートが表示されない

これは仕様によるものです。ユーザーが間違いを犯す前にエラーメッセージを表示したくないと想定できるためですが、この機能が必要になる場合もあります。そのため、ValidatesOnTargetUpdatedプロパティがValidationRuleクラスに導入されました。trueに設定すると、検証結果がすぐに表示されます。ただし、注意点が1つあります。ページの初期化後にDataContextを設定する必要があります。これは、初期化コードをそこに配置する必要があることを示す生成されたコメント行の後のコンストラクター、またはLoadedイベントのいずれかになります。XAMLでDataContextを設定する場合は、この問題の解決策をここで見つけます: http ://wpfglue.wordpress.com/2009/12/08/navigating-from-object-to-object/

ただし、これはWPF4.0で修正されると聞きました。

編集:

より永続的なリンクはここにあります。

于 2011-05-09T19:15:13.910 に答える