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

Posted

技术标签:

【中文标题】如何以编程方式更改 WPF 中的数据网格行颜色?【英文标题】:How do I programatically change datagrid row color in WPF? 【发布时间】:2011-06-29 03:47:29 【问题描述】:

我想知道这是否可能。我有这个数据网格包含 3 列和 2 行。我想要的是根据我输入的数据更改我的数据网格上 URL 列的背景。

这是我的 xaml 代码示例:

<DataGrid
    x:Name="mylistview"
    BorderBrush="#FF373737"
    Background="Black"
    VerticalGridLinesBrush="#FF232323"
    HorizontalGridLinesBrush="#FF212121">
    <DataGrid.Columns>
        <DataGridTextColumn Header="URL" Foreground="Binding rowColor" Binding="Binding url"/>
        <DataGridTextColumn Header="Version" Foreground="White" Binding="Binding version"/>
        <DataGridTextColumn Header="Valid" Foreground="White" Binding="Binding valid"/>
    </DataGrid.Columns>
</DataGrid>

我的班级过去常常用行填充数据网格:

public class myData

    public string url get; set;
    public string versionget; set;
    public string validget; set;

    //this should be the value that changes the bg color 
    public string rowColor get; set; 

这是我向控件添加行的方法:

 myData data1 = new myData();
 data1.url = "http://google.com";
 data1.valid = "yes";
 data1.version = "1";
 data1.rowColor = "#FF000000";
 this.mylistview.Items.Add(data1);

 data1.url = "http://yahoo.com";
 data1.valid = "no";
 data1.version = "1";
 data1.rowColor = "#000000FF";
 this.mylistview.Items.Add(data1);

我有两个元素。每行都应该有自己的颜色。第一个应该是红色的 第二个应该是蓝色的。我真的不知道如何让控件使用 rowColor 值。

我需要做什么才能让它工作?

【问题讨论】:

【参考方案1】:

您的rowColor 不应返回字符串(我会将其重命名为RowColor,因为它是公开的),而是返回实际的颜色画笔。 (顺便说一下你的颜色不对,第一个是不透明的黑色,第二个是透明的蓝色)

例如

public Brush rowColor  get; set; 
data1.rowColor = Brushes.Red;
data2.rowColor = Brushes.Blue;

如果您确实需要从字符串解析,您可以使用 value converter 或解析 Xaml 时使用的标准转换。

此外,我不确定将这些属性绑定到列的Foreground 是否有效。

【讨论】:

以上是关于如何以编程方式更改 WPF 中的数据网格行颜色?的主要内容,如果未能解决你的问题,请参考以下文章

使用 WPF C# 更改数据网格颜色的问题

如何使用从wpf中的数据库中获取的值更改datagrid行背景颜色

在WPF中更改网格行背景颜色

如何根据严重性更改数据网格中的行颜色?

使用 WPF 数据网格时如何更改列标题的背景颜色

WPF使用转换器更改datagrid单元格背景颜色