Heim >Backend-Entwicklung >C++ >Wie kann ich die Hintergrundfarbe einzelner Zellen in einem WPF-DataGrid basierend auf ihren Werten bedingt ändern?

Wie kann ich die Hintergrundfarbe einzelner Zellen in einem WPF-DataGrid basierend auf ihren Werten bedingt ändern?

DDD
DDDOriginal
2025-01-23 09:11:12625Durchsuche

How can I conditionally change the background color of individual cells in a WPF DataGrid based on their values?

Ä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!

Stellungnahme:
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