wpf datagrid选中行失去焦点后,不同列样式不同
时间: 2024-09-29 07:08:09 浏览: 36
WPF中自定义复杂DataGrid列样式
在WPF DataGrid中,当某一行被选中并失去焦点后,你可以通过设置`DataGrid.RowStyle`属性以及`DataTrigger`来实现不同列的样式变化。`DataGrid.RowStyle`允许你在数据项的默认样式基础上添加自定义样式,而`DataTrigger`则可以根据特定条件(如选中状态)应用不同的样式。
例如,首先在资源文件(ResourceDictionary.xaml)中定义一个DataTrigger规则:
```xml
<DataTrigger Binding="{Binding IsSelected, ElementName=dataGrid}" Value="True">
<Setter Property="Background" TargetName="selectedColumnHeaderStyle" Value="LightBlue"/>
</DataTrigger>
```
然后在`<Window.Resources>`部分引用这个资源,并为需要改变样式的列创建一个单独的`CellStyle`:
```xml
<Style x:Key="selectedColumnHeaderStyle" TargetType="DataGridColumnHeader">
<!-- 样式内容 -->
<Setter Property="Foreground" Value="White" />
</Style>
<DataGrid Name="dataGrid"
Style="{StaticResource YourDataGridStyle}"
AutoGenerateColumns="False">
<!-- 指定你想应用此样式的列 -->
<DataGrid.Columns>
<DataGridTextColumn Header="Header1"
CellStyle="{StaticResource selectedColumnHeaderStyle}">
<!-- ... -->
</DataGridTextColumn>
<!-- 其他列... -->
</DataGrid.Columns>
</DataGrid>
```
这里的关键在于将`CellStyle`关联到`IsSelected`属性的变化,当行被选中时,对应的列头背景颜色会变为浅蓝色。如果你有多个列想要设定不同的样式,只需为每个列分别创建一个`CellStyle`并应用对应的触发器。
阅读全文