Как выделить ячейку с ошибкой? - PullRequest
0 голосов
/ 15 января 2019

У меня есть 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 голосов
/ 15 января 2019

Вы можете использовать DataTrigger, который связывается с Validation.HasError вложенным свойством родителя DataGridRow:

<Style x:Key="cycleErrStyle" TargetType="{x:Type TextBlock}">
    <Setter Property="Background" Value="Magenta"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=(Validation.HasError), RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="true" >
            <Setter Property="Background" Value="Red" />
            <Setter Property="Foreground" Value="White" />
        </DataTrigger>
    </Style.Triggers>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...