如何更改 DataGrid 中某一行的背景颜色
Posted
技术标签:
【中文标题】如何更改 DataGrid 中某一行的背景颜色【英文标题】:How to change the background color of a certain row in a DataGrid 【发布时间】:2015-03-26 22:05:46 【问题描述】:例如,在 xaml 中,我有一个名为 PersonList 的 DataGrid:
<DataGrid Name="PersonList" />
在代码隐藏中我有一个 Person 集合:
ObservableCollection<Person> persons = ViewModel.PersonModel;
然后我创建了一个Person DataTable,并通过以下方式将它绑定到PersonList:
PersonDataTable.Columns.Add("Name", typeof(string));
PersonDataTable.Columns.Add("Age", typeof(int));
foreach (var person in persons)
if (person != null)
PersonDataTable.Rows.Add(
Person.Name,
Person.Age
);
PersonList.ItemSource = PersonDataTable.AsDataView;
我的问题是,如何改变某一行的背景颜色?例如,更改人的年龄> 50的行的背景颜色
我尝试通过访问 PersonList.ItemSource 中的每一行来做到这一点,但我失败了,该行始终为空:
int count = 0;
foreach (var person in PersonList.ItemSource)
var row = PersonList.ItemContainerGenerator.ContainerFromItem(person) as DataGridRow;
if (PersonDataTable.Rows[count].Field<int>(1) > 50)
row.Background = Brushes.Gray;
count++;
请帮助,WPF 大师 :)
【问题讨论】:
【参考方案1】:使用转换器尝试您的逻辑,如下所示:
这是我的 AgeAboveLimitConverter 文件:
using System;
using System.Windows.Data;
namespace DataGridSample.Converter
public class AgeAboveLimitConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
if (value != null)
return (int)value > 50;
return false;
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
return null;
然后在您的 datagrid xaml 文件中,
添加命名空间xmlns:converter="clr-namespace:DataGridSample.Converter"
为DataGrid中的DataGridRow添加样式,
<Grid>
<Grid.Resources>
<converter:AgeAboveLimitConverter x:Key="AgeConverter"/>
</Grid.Resources>
<DataGrid Name="PersonList">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow" >
<Setter Property="Background" Value="Transparent" />
<Style.Triggers>
<DataTrigger Binding="Binding Path=Age,Converter=StaticResource AgeConverter" Value="true">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
</DataGrid>
</Grid>
【讨论】:
【参考方案2】:你快到了。请尝试以下操作:
int count = 0;
foreach (var person in PersonList.ItemSource)
var row = PersonList.ItemContainerGenerator.ContainerFromItem(person) as DataGridRow;
if (PersonDataTable.Rows[count].Field<int>(1) > 50)
row.DefaultCellStyle.BackColor = Color.Gray;
count++;
【讨论】:
谢谢,但我正在使用 WPF :( 它没有解决我的问题 好叫格兰特。没看到最后一行。 Look at the answer for this topic on how to setup a DataTrigger。应该是你要找的。span> 谢谢!终于让它工作了......我以为我已经很接近了,可以按照我的方式工作:P以上是关于如何更改 DataGrid 中某一行的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 WPF Toolkit Datagrid 更改单元格的背景颜色
如何使用从wpf中的数据库中获取的值更改datagrid行背景颜色
Windows CE 上的 C# .NET 3.5 CF,在 DataGrid 中更改行背景颜色