在运行时更改 WPF DataGrid 的整个列的背景颜色

Change the Background Color of Entire Column of WPF DataGrid at RunTime

提问人:MoonKnight 提问时间:3/27/2013 最后编辑:CommunityMoonKnight 更新时间:5/16/2016 访问量:48899

问:

总而言之,我对 WPF 比较陌生。我一直在寻找这个问题的答案,但我发现的只是如何在运行时而不是列上色;例如,以下问题:

  1. 更改 WPF 数据网格行颜色

  2. 如何以编程方式更改 WPF 中的数据网格行颜色?

  3. 以编程方式为 DataGrid 中的行指定颜色

  4. 根据值更改 DataGrid 单元格颜色

等。

我已经在MSDN DataGrid页面上看到了该属性,但是尽管对此进行了搜索,但其用途对我来说并不明显。CellStyle

如何在运行时更改整个列的背景颜色?

感谢您抽出时间接受采访。

C# WPF 数据网格 颜色

评论


答:

29赞 Matan Shahar 3/27/2013 #1

我让它工作的唯一方法是自己设置列(不使用 AutoGenerate)。因此,首先要做的是定义列:

<DataGrid x:Name="Frid" ItemsSource="{Binding Path=.}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="First Name" 
                                Binding="{Binding Path=FirstName}">

            </DataGridTextColumn>

            <DataGridTextColumn Header="Last Name" 
                                Binding="{Binding Path=LastName}">

            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid> 

然后,您需要设置每列 CellStyle,并将 Background 绑定到可在 Window.Resources 中声明的静态资源:

<Window x:Class="WpfApplication1.MainWindow" ...>
<Window.Resources>
    <SolidColorBrush x:Key="clBr" Color="White" />
</Window.Resources>
...

列:

                <DataGridTextColumn Header="First Name" 
                                    Binding="{Binding Path=FirstName}">
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="Background" 
                                Value="{StaticResource clBr}" />
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>

然后,只需通过代码或 XAML 操作来操作静态资源。

希望它有所帮助。

评论

0赞 MoonKnight 3/27/2013
感谢您抽出宝贵时间,但我想知道如何在运行时执行此操作,因为我拥有的列是可变的,并且是在运行时创建的。祝一切顺利...
0赞 Vivek Parikh 4/22/2013
我希望它在运行时完成。我在窗口上将 DataGrid 与 DataTable 绑定 load.so 该怎么做?
0赞 Kokombads 2/13/2015
我按照你在回答中指出的做了,它奏效了。但是如何在运行时以编程方式更改它呢?
22赞 dotNET 2/10/2014 #2

有点旧,但以下是以编程方式执行此操作的方法(对于 AutoGen 列):

private void dgvMailingList_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    e.Column.CellStyle = new Style(typeof(DataGridCell));
    e.Column.CellStyle.Setters.Add(new Setter(DataGridCell.BackgroundProperty,  new SolidColorBrush(Colors.LightBlue)));
}

同样的方法也适用于非 AutoGen 色谱柱。