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
Libérer: 2025-01-23 09:11:12
original
670 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

Liaison en XAML :

<code class="language-xml"><DataGridTextColumn Binding="{Binding Name}">
    <DataGridTextColumn.ElementStyle>
        <Setter Property="Background" Value="{Binding NameBrush}"/>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn></code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal