根據儲存格值變更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中文網其他相關文章!