Maison >développement back-end >C++ >Comment puis-je modifier conditionnellement la couleur d'arrière-plan de cellules individuelles dans un DataGrid WPF en fonction de leurs valeurs ?

Comment puis-je modifier conditionnellement la couleur d'arrière-plan de cellules individuelles dans un DataGrid WPF en fonction de leurs valeurs ?

DDD
DDDoriginal
2025-01-23 09:11:12625parcourir

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

Modifier la couleur d'arrière-plan de la cellule WPF DataGrid en fonction de la valeur de la cellule

WPF DataGrid permet de personnaliser l'apparence des cellules en fonction de la valeur de la cellule. Cependant, l'application de styles directement à DataGridCell affecte la ligne entière, et non les cellules individuelles.

La solution de contournement consiste à cibler des colonnes spécifiques contenant différents contenus de cellules. Par exemple, supposons que vous souhaitiez mettre en surbrillance toutes les cellules de la colonne « Nom » qui ont la valeur « John ».

Cellules basées sur TextBlock

Pour les colonnes contenant des TextBlocks, vous pouvez utiliser le ElementStyle dans le Trigger de la colonne pour modifier l'attribut Text en fonction de la valeur 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>

Méthode de conversion de valeur

Une alternative consiste à utiliser un convertisseur de valeur pour convertir la valeur de la cellule en pinceau :

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

Utilisation en 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>

Liaison d'attribut directe

Vous pouvez également lier directement Background à une propriété qui renvoie le pinceau souhaité :

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

Liaison en XAML :

<code class="language-xml"><DataGridTextColumn Binding="{Binding Name}">
    <DataGridTextColumn.ElementStyle>
        <Setter Property="Background" Value="{Binding NameBrush}"/>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn></code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn