根据单元格值更改WPF DataGrid单元格背景颜色
WPF DataGrid允许根据单元格值自定义单元格外观。然而,直接应用样式到DataGridCell
会影响整行,而非单个单元格。
解决方法是针对包含不同单元格内容的特定列。例如,假设需要高亮显示“Name”列中值为“John”的所有单元格。
基于TextBlock的单元格
对于包含TextBlock的列,可以在列的ElementStyle
中使用Trigger
根据Text
值更改Background
属性:
<code class="language-xml"><DataGridTextColumn Binding="{Binding Name}"> <DataGridTextColumn.ElementStyle> <Style TargetType="TextBlock"> <Style.Triggers> <Trigger Property="Text" Value="John"> <Setter Property="Background" Value="LightGreen"/> </Trigger> </Style.Triggers> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn></code>
值转换器方法
另一种方法是使用值转换器将单元格值转换为画刷:
<code class="language-csharp">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(); } }</code>
在XAML中的用法:
<code class="language-xml"><Window.Resources> <local:NameToBrushConverter x:Key="NameToBrushConverter"/> </Window.Resources> <DataGridTextColumn Binding="{Binding Name}"> <DataGridTextColumn.ElementStyle> <Setter Property="Background" Value="{Binding Name, Converter={StaticResource NameToBrushConverter}}"/> </DataGridTextColumn.ElementStyle> </DataGridTextColumn></code>
直接属性绑定
还可以直接将Background
绑定到返回所需画刷的属性:
<code class="language-csharp">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; } }</code>
在XAML中的绑定:
<code class="language-xml"><DataGridTextColumn Binding="{Binding Name}"> <DataGridTextColumn.ElementStyle> <Setter Property="Background" Value="{Binding NameBrush}"/> </DataGridTextColumn.ElementStyle> </DataGridTextColumn></code>
以上是如何根据 WPF DataGrid 中的值有条件地更改单个单元格的背景颜色?的详细内容。更多信息请关注PHP中文网其他相关文章!