You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 05:34:55