gpt4 book ai didi

c# - 根据值更改 DataGrid 单元格颜色

转载 作者:太空宇宙 更新时间:2023-11-03 14:48:13 25 4
gpt4 key购买 nike

我有一个 WPF 数据网格,我想要根据值使用不同的单元格颜色。我的 xaml 中有以下代码

Style TargetType="DataGridCell"

但不是只选择一个单元格而是选择所有行?我错过了什么?

最佳答案

如果您尝试设置 DataGrid.CellStyle,则 DataContext 将成为行,因此如果您想更改基于一个单元格的颜色,在特定列中执行此操作可能最简单,尤其是因为列可以有不同的内容,例如 TextBlocks、ComboBoxes 和 CheckBoxes。下面是将 NameJohn 的所有单元格设置为浅绿色的示例:

<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="Text" Value="John">
<Setter Property="Background" Value="LightGreen"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

A Screenshot


你也可以使用 ValueConverter改变颜色。

public class NameToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string input = (string)value;
switch (input)
{
case "John":
return Brushes.LightGreen;
default:
return DependencyProperty.UnsetValue;
}
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}

用法:

<Window.Resources>
<local:NameToBrushConverter x:Key="NameToBrushConverter"/>
</Window.Resources>
...
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="{Binding Name, Converter={StaticResource NameToBrushConverter}}"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

另一种选择是直接将 Background 绑定(bind)到一个返回相应颜色画笔的属性。您将必须在颜色所依赖的属性的 setter 中触发属性更改通知。

例如

public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged(nameof(Name));
OnPropertyChanged(nameof(NameBrush));
}
}
}

public Brush NameBrush
{
get
{
switch (Name)
{
case "John":
return Brushes.LightGreen;
default:
break;
}

return Brushes.Transparent;
}
}

关于c# - 根据值更改 DataGrid 单元格颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53214003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com