Heim > Backend-Entwicklung > C++ > WPF DataGrid: Wie ändere ich die Farbe einer Zelle, nicht einer Zeile basierend auf dem Wert?

WPF DataGrid: Wie ändere ich die Farbe einer Zelle, nicht einer Zeile basierend auf dem Wert?

Barbara Streisand
Freigeben: 2025-01-23 09:17:10
Original
985 Leute haben es durchsucht

WPF DataGrid: How to Change Cell, Not Row, Color Based on Value?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage