Ändern Sie die Hintergrundfarbe der WPF DataGrid-Zellen basierend auf dem Zellenwert
WPF DataGrid ermöglicht die Anpassung der Zellendarstellung basierend auf dem Zellenwert. Das direkte Anwenden von Stilen auf DataGridCell
wirkt sich jedoch auf die gesamte Zeile und nicht auf einzelne Zellen aus.
Die Problemumgehung besteht darin, auf bestimmte Spalten mit unterschiedlichen Zellinhalten abzuzielen. Angenommen, Sie möchten alle Zellen in der Spalte „Name“ hervorheben, die den Wert „John“ haben.
TextBlock-basierte Zellen
Für Spalten, die TextBlocks enthalten, können Sie das ElementStyle
im Trigger
der Spalte verwenden, um das Text
-Attribut basierend auf dem Background
-Wert zu ändern:
<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>
Wertkonvertierungsmethode
Eine Alternative besteht darin, einen Wertekonverter zu verwenden, um den Zellenwert in einen Pinsel umzuwandeln:
<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>
Verwendung in 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>
Direkte Attributbindung
Sie können Background
auch direkt an eine Eigenschaft binden, die den gewünschten Pinsel zurückgibt:
<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>
Bindung in XAML:
<code class="language-xml"><DataGridTextColumn Binding="{Binding Name}"> <DataGridTextColumn.ElementStyle> <Setter Property="Background" Value="{Binding NameBrush}"/> </DataGridTextColumn.ElementStyle> </DataGridTextColumn></code>
Das obige ist der detaillierte Inhalt vonWie kann ich die Hintergrundfarbe einzelner Zellen in einem WPF-DataGrid basierend auf ihren Werten bedingt ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!