如何突出显示包含错误的单元格?

时间:2019-01-15 16:14:43

标签: wpf validation xaml styles

我有一个DataGrid,其中有四列,在用户输入无效值的情况下,我已经为其定义了样式和触发样式。

<Style TargetType="{x:Type DataGridRow}">
    <Setter Property="FontSize" Value="16"/>
    <Setter Property="FontFamily" Value="ArialMT"/>
    <Setter Property="Height" Value="24"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="ValidationErrorTemplate">
        <Setter.Value>
            <ControlTemplate>
                <Grid>
                    <Ellipse Width="12" Height="12" Fill="Red" Stroke="Black" StrokeThickness="0.5"/>
                    <TextBlock FontWeight="Bold" Padding="4,0,0,0" Margin="0" VerticalAlignment="Top" Foreground="White" Text="!" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="BorderBrush" Value="Red"/>
            <Setter Property="IsEnabled" Value="True" />
            <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>

这很好,并且完整的DataGridRow被标记为错误的,因为我在XAML中使用了它:

<DataGrid.RowValidationRules>
    <local:CycleValidationRule ValidationStep="UpdatedValue" />
</DataGrid.RowValidationRules>

现在,我想另外用无效值突出显示DataGridCell(设置背景色)。因此,我定义了另一种样式:

<Style x:Key="cycleErrStyle" TargetType="{x:Type TextBlock}">
    <Setter Property="Background" Value="Magenta"/>
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true" >
            <Setter Property="Background" Value="Red" />
            <Setter Property="Foreground" Value="White" />
        </Trigger>
    </Style.Triggers>
</Style>

但这不起作用。 当我将<Trigger Property="Validation.HasError" Value="false" >设置为 false 时,样式会受到影响。似乎在验证网格的行后,Validation.HasError属性已被重置。

在XAML中,我对此进行了定义:

 <DataGridTextColumn x:Name="TagCycle" Header="Cycle" Binding="{Binding Mode=TwoWay, Path=RawTag.Cycle, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" 
                                ElementStyle="{StaticResource ResourceKey=cycleErrStyle}" />

除了标记该行为错误行外,如何突出显示无效的单元格?

1 个答案:

答案 0 :(得分:1)

您可以使用绑定到父DataTrigger的{​​{1}}附加属性的Validation.HasError

DataGridRow