3

这是一个 WPF/MVVM 项目。我正在使用 MS 企业库验证应用程序块 v5.0。

要求是,如果组合框的值为“Facilities”或“Other”,则 Comment 字段必须具有值。

也就是说,我创建了一个自定义验证器,并以这种方式执行验证:

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

还有其他错误可能性,这些都包含在标准 VAB 属性中。

这似乎工作正常。所以,现在,如果我有一个错误条件,它可能是任何一个规则,并且我可以查询 ValidationResults 集合以确定哪个属性有错误。但是,发生这种情况时,我无法为特定元素应用样式。有一次,我对给定控件使用属性级别验证,但是当我需要比较一个验证规则的多个属性时,这不起作用。

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>

多属性自定义验证器报告错误后,如何让 Comments 文本框具有某种样式?

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 回答