如何在选择 DataGridCell 时更改模板项的背景

How to change background of the template item, on selecting DataGridCell

我需要根据数据单元格是否被选中来更改位于 DataGridTemplateColumn 单元格内的文本框的背景颜色。

目前我设法做的是,更改模板单元格的背景颜色,由于错误管理而变得无用。

因此,我想更改文本框的背景,并在选择更改时将其还原。

  <DataGrid.Resources>
                <Style TargetType="{x:Type DataGridRow}">
                    <Style.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Background" Value="DarkBlue"/>
                            <Setter Property="Foreground" Value="Black"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.Resources>

            <DataGrid.Columns>

                <DataGridTemplateColumn IsReadOnly="True" MinWidth="150" Width="*">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox  Text="{Binding Path=TwoDLineName, Mode=TwoWay,UpdateSourceTrigger=LostFocus, ValidatesOnDataErrors=True, NotifyOnValidationError=True}"
                                 HorizontalAlignment="Stretch"  Style="{StaticResource TextBoxValidated}"/>
                              
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

您可以将 Style 与绑定到父行的 IsSelected 属性 的 DataTrigger 结合使用:

<DataGridTemplateColumn IsReadOnly="True" MinWidth="150" Width="*">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Path=TwoDLineName, Mode=TwoWay,UpdateSourceTrigger=LostFocus, ValidatesOnDataErrors=True, NotifyOnValidationError=True}">
                <TextBox.Style>
                    <Style TargetType="TextBox" BasedOn="{StaticResource TextBoxValidated}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsSelected,
                                RelativeSource={RelativeSource AncestorType=DataGridRow}}"
                                         Value="True">
                                <Setter Property="Background" Value="Red" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBox.Style>
            </TextBox>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>