Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选定行的WPF DataGrid RowStyle不更改背景和前景颜色_Wpf_Datagrid_Background Color - Fatal编程技术网

选定行的WPF DataGrid RowStyle不更改背景和前景颜色

选定行的WPF DataGrid RowStyle不更改背景和前景颜色,wpf,datagrid,background-color,Wpf,Datagrid,Background Color,我正在windows 7上使用Visual Studio 2012。我需要知道为什么网格选定行的以下样式不适用于背景色和前景色,但适用于其他属性,如BorderBrush和BorderThickness等,效果非常好?虽然我可以看到鼠标在网格行上移动时它们在变化 <Style x:Key="gridRowStyle" TargetType="{x:Type DataGridRow}"> <Style.Triggers> <Trigger Pr

我正在windows 7上使用Visual Studio 2012。我需要知道为什么网格选定行的以下样式不适用于背景色和前景色,但适用于其他属性,如BorderBrush和BorderThickness等,效果非常好?虽然我可以看到鼠标在网格行上移动时它们在变化

<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>

在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样式写入触发器或从样式中删除默认触发器。

只需在datagrid的行级别删除此属性,它们的优先级高于触发的属性


nezac

可能是因为GridCell内容覆盖了GridRow?你试过查看Snoop中的控件吗?我用你发布的内容快速测试了一下,效果很好。您能提供更多关于DataGrid和任何行定义的详细信息吗?我是WPF新手,以前从未使用过snoop。我会试试看到底发生了什么。谢谢…@BrentStewart,这里是DataGrid的完整定义:其中RecordList是简单类Record对象的自定义集合,它有两个公共属性FirstName和LastName,这两个属性在当前窗口资源中定义:public class Record{public string FirstName{set;get;}public string LastName{set;get;}}公共类MyCollection:ObservableCollection{}