WPF分层DataGrid第二列选中行背景不生效问题求助
问题根源与修复方案
问题出在第二列(Device列)的自定义DataGridCell样式里,两个关键原因导致选中时背景不变化:
- 硬编码设置了
Background="White",直接覆盖了DataGrid默认的选中背景色逻辑 - 自定义的
ControlTemplate没有添加响应IsSelected状态的触发器,无法在选中时切换背景
修复步骤:
- 移除CellStyle里固定的Background设置
- 在ControlTemplate的Triggers中添加选中状态的触发规则,同步背景色
修改后的第二列CellStyle代码:
<DataGridTextColumn.CellStyle> <Style TargetType="DataGridCell"> <!-- 移除硬编码的Background="White" --> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="DataGridCell"> <!-- 给外层容器绑定Background,确保选中时能继承状态色 --> <StackPanel Orientation="Horizontal" Background="{TemplateBinding Background}"> <ToggleButton x:Name="Expander" Margin="{Binding Level,Converter={StaticResource IndentBasedOnLevel}}" IsChecked="{Binding Path=IsExpanded, UpdateSourceTrigger=PropertyChanged}" ClickMode="Press"> <ToggleButton.Style> <Style TargetType="{x:Type ToggleButton}"> <Setter Property="Focusable" Value="False"/> <Setter Property="Width" Value="19"/> <Setter Property="Height" Value="13"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ToggleButton}"> <Border Width="19" Height="13" Background="Transparent"> <Border Width="11" Height="11" BorderThickness="0" BorderBrush="#FF7898B5" CornerRadius="1" SnapsToDevicePixels="true"> <Path x:Name="ExpandPath" Margin="1,1,1,1" Fill="Black" Data="M 0 0 L 9 5 L 0 9 Z"/> </Border> </Border> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter Property="RenderTransform" TargetName="ExpandPath"> <Setter.Value> <RotateTransform Angle="180" CenterY="3" CenterX="3" /> </Setter.Value> </Setter> <Setter Property="Fill" TargetName="ExpandPath" Value="Black" /> <Setter Property="Data" TargetName="ExpandPath" Value="M 0 7 L 7 0 L 0 0 Z"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </ToggleButton.Style> </ToggleButton> <ContentPresenter Content="{TemplateBinding Content}" /> </StackPanel> <ControlTemplate.Triggers> <DataTrigger Binding="{Binding HasChildren}" Value="False"> <Setter TargetName="Expander" Property="Visibility" Value="Hidden"/> </DataTrigger> <!-- 添加选中状态触发器,同步系统高亮色 --> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="{StaticResource {x:Static SystemColors.HighlightBrushKey}}"/> <!-- 可选:修改选中时的文字颜色,确保可读性 --> <Setter Property="Foreground" Value="White"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </DataGridTextColumn.CellStyle>
注:给StackPanel绑定Background="{TemplateBinding Background}",能让选中时的背景色传递到整个单元格容器,确保视觉效果统一。行/交替行的默认背景色逻辑会自动生效,无需额外设置。
内容的提问来源于stack exchange,提问作者davecove
相关产品推荐
相关产品推荐

