我知道我的问题已经在这里以多种方式陈述和回答。但我就是无法让它按照我想要的方式运行。正如标题所述,我尝试根据其内容更改我的 datagridcell 的背景颜色。我对 WPF 比较陌生,但我想解决方案是结合了绑定的转换器。目标是根据称为“状态”的属性更改单元格的背景颜色,该属性是具有四种状态的枚举。
我已经写了一个转换器:
using System;
using System.Windows.Data;
using System.Drawing;
using System.Windows;
namespace Admin
{
[ValueConversion(typeof(Member.UserStatus), typeof(Brushes))]
public class StatusToColorConverter : IValueConverter
{
#region IValueConverter Member
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var enumValue = (Member.UserStatus)value;
if(enumValue == Member.UserStatus.Change)
return Brushes.Red;
if(enumValue == Member.UserStatus.Import)
return Brushes.Blue;
if(enumValue == Member.UserStatus.Remove)
return Brushes.Orange;
if(enumValue == Member.UserStatus.Synced)
return Brushes.Green;
else
return DependencyProperty.UnsetValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
}
到目前为止,一切都很好。xaml 部分看起来像这样(经过一些谷歌搜索......)
<DataGrid.Columns>
<DataGridTemplateColumn Header="Status">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Status}" Background="{Binding Status, Converter={StaticResource StatusToColorConverter}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
我还没有真正了解 DataGridTemplateColums 和 DataTemplates 是什么。但是我用 CellStyle 和另一种我不记得的方式尝试了同样的方法。转换器有一个断点,并在我尝试的所有解决方案中被调用。但不知何故,“背景”属性似乎忽略了转换器的返回值。所以我猜我的错(或我缺乏理解)有另一个来源。
有人愿意指出我正确的方向吗?