根据DataGridTemplateColumn中的复选框选中状态设置DataGridCell样式



我有一个DataGrid,它的数据绑定到DataTable,列设置为自动生成。

第一列的布尔数据类型已替换为DataGridTemplateColumn和DataTemplate中的CheckBox。一切正常。

但是,现在我想在未选中复选框时将DataGridCell背景设置为红色。

问题是,我不知道如何使用IsChecked触发器设置CheckBox的父DataGridCell样式。

WPF:

<Window.Resources>
<DataGridTemplateColumn x:Key="colSelect">   
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="chkBxSelect" 
HorizontalAlignment="Center" 
VerticalAlignment="Center"
IsChecked="{Binding Path=Select, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
Click="chkBxSelect_Click">
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox x:Name="chkBxSelectAll" 
Content="Select" 
HorizontalAlignment="Center"
VerticalAlignment="Center" 
IsThreeState="True" 
Click="chkBxSelectAll_Click"  
IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.SelectAll}">
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Foreground" Value="White"></Setter>
<Setter Property="Background" Value="DarkGray"></Setter>
<Setter Property="BorderBrush" Value="Red"></Setter>
<Setter Property="BorderThickness" Value="1"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn>
</Window.Resources>

C#而DataGrid列自动生成:

DataGridTemplateColumn col = (DataGridTemplateColumn)Resources["colSelect"];
e.Column = col;
e.Column.IsReadOnly = false;

更新:到目前为止,我已经发现可以在绑定中使用RelativeSourceAncestorType来完成。然而,仍在努力让它发挥作用。

在经历了很多挣扎之后,甚至没有尝试最明显的解决方案。我找到了。它相对来说非常简单。

刚刚将DataTrigger添加到DataGridCell样式,所有这些都完成了,WPF是神奇的。

<DataGridTemplateColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Foreground" Value="White"></Setter>
<Setter Property="Background" Value="DarkGray"></Setter>
<Setter Property="BorderBrush" Value="Red"></Setter>
<Setter Property="BorderThickness" Value="1"></Setter>
</Trigger>
<DataTrigger Binding="{Binding Path=Select, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Value="False">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTemplateColumn.CellStyle>

最新更新