3

これは WPF/MVVM プロジェクトです。MS Enterprise Library Validation Application Block v5.0 を使用しています。

要件は、コンボボックスの値が「施設」または「その他」の場合、コメント フィールドに値が必要であるということです。

そうは言っても、カスタムバリデーターを作成し、次の方法で検証を実行しています。

ValidationResults results = Validation.Validate<Annotation>(this.Annotation);

他にもエラーの可能性があり、それらは標準の VAB 属性でカバーされています。

これはうまく機能しているようです。したがって、エラー状態が発生した場合、それはルールのいずれかである可能性があり、ValidationResults コレクションを使用して、どのプロパティにエラーがあるかを判断するために問い合わせることができます。ただし、これが発生したときに特定の要素にスタイルを適用するのに問題があります。ある時点で、特定のコントロールに対してプロパティ レベルの検証を使用していましたが、1 つの検証ルールに対して複数のプロパティを比較する必要がある場合、それは機能しません。

vab:Validate.BindingForProperty="Text"

上記のプロパティとこのスタイルは、StringLenghtValidator のような単純な単一のプロパティ検証で機能します。これは私のシナリオでは機能しません。

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">            
        <Setter Property="Background" Value="White"/>
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="ToolTip"
                        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                        Path=(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
        </Style.Triggers>
    </Style>

複数プロパティ カスタム バリデータがエラーを報告した後、特定のスタイルを持つコメント テキスト ボックスを取得するにはどうすればよいですか?

4

1 に答える 1

0

このアプローチでエンタープライズライブラリを使用しています。試してみてください

<ControlTemplate x:Key="ErrorMarkTemplate" TargetType="{x:Type Label}" >
    <TextBlock Text="*" Margin="2,0,2,0" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" FontSize="16"  Foreground="{DynamicResource ErrorBrush}" /> 
</ControlTemplate>

 <ControlTemplate x:Key="GeneralErrorTemplate" >
        <Grid ClipToBounds="False" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="10" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Label Grid.Column="0" Template="{DynamicResource ErrorMarkTemplate}"  />
            <AdornedElementPlaceholder Grid.Column="1"  />
        </Grid  >
</ControlTemplate>


<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}">     
        <Setter Property="Validation.ErrorTemplate" Value="{DynamicResource GeneralErrorTemplate}"/>
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="ToolTip" Value="{Binding (Validation.Errors).CurrentItem.ErrorContent, RelativeSource={x:Static RelativeSource.Self}}"/>
    </Trigger>
    </Style.Triggers>
</Style>
于 2012-08-12T15:09:39.123 に答える