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