WPF DataGrid选定行的行样式未更改背景和前景颜色

7

我在windows 7上使用Visual Studio 2012。我需要知道以下Grid选中行的样式为什么在背景和前景色方面无法正常工作,但对于其他属性(如BorderBrush和BorderThickness等)却能完美工作?虽然我可以在鼠标悬停在Grid行上时看到它们正在改变。

<Style x:Key="gridRowStyle" TargetType="{x:Type DataGridRow}">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="PeachPuff"/>
            <Setter Property="Foreground" Value="BlueViolet"/>
        </Trigger>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="PeachPuff"/>
            <Setter Property="Foreground" Value="BlueViolet"/>
            <Setter Property="BorderBrush" Value="BlueViolet" />
            <Setter Property="BorderThickness" Value="2" />

        </Trigger>
    </Style.Triggers>
</Style>

这是我在网格上使用的方法。

<DataGrid RowStyle="{StaticResource gridRowStyle}">

我更注重了解“为什么”,而不是问题的解决方案,因为如果我使用单元格样式而不是行样式,则已经有了解决方案,如下所示:

<Style x:Key="gridCellStyle" TargetType="{x:Type DataGridCell}">
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="PeachPuff"/>
            <Setter Property="Foreground" Value="BlueViolet"/>
        </Trigger>
    </Style.Triggers>
</Style>

2
可能是因为GridCell的内容覆盖了GridRow?你尝试过在Snoop中查看控件吗? - Dutts
我用你发布的内容进行了快速测试,结果很好。你能否提供更多关于你的DataGrid和任何行定义的细节? - Brent Stewart
我对WPF很陌生,以前从未使用过Snoop。我会尝试一下看看发生了什么。谢谢... - user2071895
嗯,我仍然无法重现你的问题。将你的代码复制粘贴到一个新的WPF项目中可以正常工作。我赞同使用Snoop来查看实际情况。请告诉我们你发现了什么。 - Brent Stewart
看一下这个:https://dev59.com/NnM_5IYBdhLWcg3wzmgw - Mohsen
显示剩余7条评论
2个回答

0
在DataGridCell的默认样式中,具有以下默认样式触发器。
<Trigger Property="IsSelected" Value="True">
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>

如果您为DataGridRow编写了触发器,则它仅适用于在可视树中位于DataGridCell之前放置的元素。

因此,要在选择时更改背景和前景色,必须在DataGridCell样式中编写触发器或从样式中删除默认触发器。


0

在数据网格的行级别上简单地删除这些属性,它们优先于触发的属性。

nezac


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接