如何修改WPF Material Design DataGrid失焦后选中行的单元格颜色
解决WPF Material Design DataGrid选中行失焦后的颜色自定义问题
你当前的DataGridRow样式仅处理了选中状态,但当选中行失去键盘/鼠标焦点时,Material Design的默认样式会接管显示效果,因此需要添加多条件触发器来覆盖这个默认行为。
修改你的RowStyle,新增一个MultiTrigger,同时判断IsSelected=True和IsKeyboardFocusWithin=False两个条件,设置你想要的自定义颜色:
</DataGrid.ColumnHeaderStyle> <DataGrid.RowStyle> <Style TargetType="DataGridRow" BasedOn="{StaticResource MaterialDesignDataGridRow}"> <Style.Triggers> <DataTrigger Binding="{Binding Editable}" Value="False" > <Setter Property="Background" Value="#777777"/> </DataTrigger> <!-- 选中且拥有焦点时的样式 --> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="#555555" /> <Setter Property="Foreground" Value="#CCCCCC" /> </Trigger> <!-- 选中但失去焦点时的自定义样式 --> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsSelected" Value="True"/> <Condition Property="IsKeyboardFocusWithin" Value="False"/> </MultiTrigger.Conditions> <Setter Property="Background" Value="#你的自定义背景色"/> <Setter Property="Foreground" Value="#你的自定义前景色"/> </MultiTrigger> </Style.Triggers> </Style>
关键说明:
IsKeyboardFocusWithin用于判断当前行(或其内部元素)是否拥有键盘焦点,当该属性为False时,说明选中行已失去焦点。- 多条件触发器优先级高于普通触发器,会在选中且失焦时覆盖默认选中样式。
- 若需区分鼠标离开和完全失焦的场景,也可结合
IsMouseOver与IsSelected设置多条件触发器,但IsKeyboardFocusWithin是最通用的失焦判断方式。
内容的提问来源于stack exchange,提问作者tyjjh
相关产品推荐
相关产品推荐

