WPF DataGrid-Zellenfarbe basierend auf dem Wert ändern
Beim Anpassen des WPF DataGrid möchten Sie möglicherweise unterschiedliche Zellenfarben basierend auf bestimmten Werten anwenden. Dazu können Sie Stile oder Wertkonverter im XAML der DataGrid-Spalte verwenden. Aber was passiert, wenn Sie auf einen Stil stoßen, der sich versehentlich auf die gesamte Zeile und nicht auf die Zielzelle auswirkt?
Problemanalyse
Wenn dieses Problem auftritt, kann es daran liegen, dass Sie auf die CellStyle-Eigenschaft des DataGrids verweisen, die für die gesamte Zeile und nicht für einzelne Zellen gilt. Um dieses Problem zu lösen, muss die CellStyle-Eigenschaft für jede spezifische Spalte im DataGrid angegeben werden.
Stile auf Spalten anwenden
Um das Erscheinungsbild einer einzelnen Zelle anzupassen, verwenden Sie stattdessen die ElementStyle-Eigenschaft der Spalte. Wenn Sie beispielsweise alle Zellen mit einem bestimmten Wert hervorheben möchten (z. B. „John“ in der Spalte „Name“), können Sie das folgende XAML verwenden:
<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>
Mit dieser Methode werden Farbänderungen nur auf Zellen angewendet, die die angegebenen Kriterien erfüllen.
Wertkonverter verwenden
Zusätzlich zur Verwendung von Stilen können Sie auch Wertekonverter nutzen, um Zellenfarben zu ändern. Mit Wertkonvertern können Sie einen gebundenen Wert in einen anderen Wert konvertieren, beispielsweise einen Pinsel. Betrachten Sie das folgende C#-Beispiel:
<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>
Um einen Konverter zu verwenden, fügen Sie ihn in den Abschnitt „Window.Resources“ Ihres XAML ein und binden Sie den Zellenhintergrund wie folgt an den Wertkonverter:
<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>
Direkt an Eigenschaften binden
Eine andere Möglichkeit, die Hintergrundfarbe der Zelle zu steuern, besteht darin, direkt an eine Eigenschaft im Datenmodell zu binden, die den gewünschten Pinsel zurückgibt. Bei dieser Methode müssen Sie Benachrichtigungen über Eigenschaftsänderungen verarbeiten, um sicherzustellen, dass die Hintergrundfarbe aktualisiert wird, wenn sich die zugrunde liegenden Daten ändern.
Das obige ist der detaillierte Inhalt vonWPF DataGrid: Wie ändere ich die Farbe einer Zelle, nicht einer Zeile basierend auf dem Wert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!