Modifier la couleur des cellules WPF DataGrid en fonction de la valeur
Lors de la personnalisation du WPF DataGrid, vous souhaiterez peut-être appliquer différentes couleurs de cellules en fonction de valeurs spécifiques. Pour ce faire, vous pouvez utiliser des styles ou des convertisseurs de valeurs dans le XAML de la colonne DataGrid. Mais que se passe-t-il lorsque vous rencontrez un style qui affecte par inadvertance la ligne entière au lieu de la cellule cible ?
Analyse du problème
Si vous rencontrez ce problème, c'est peut-être parce que vous faites référence à la propriété CellStyle de DataGrid, qui s'applique à la ligne entière plutôt qu'à des cellules individuelles. Pour résoudre ce problème, la propriété CellStyle doit être spécifiée pour chaque colonne spécifique du DataGrid.
Appliquer des styles aux colonnes
Pour personnaliser l'apparence d'une cellule individuelle, ciblez plutôt la propriété ElementStyle de la colonne. Par exemple, si vous souhaitez mettre en évidence toutes les cellules avec une valeur spécifique (par exemple « John » dans la colonne « Nom »), vous pouvez utiliser le XAML suivant :
<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>
En utilisant cette méthode, les changements de couleur ne seront appliqués qu'aux cellules qui répondent aux critères spécifiés.
Utiliser le convertisseur de valeur
En plus d'utiliser des styles, vous pouvez également profiter de convertisseurs de valeurs pour modifier les couleurs des cellules. Les convertisseurs de valeurs vous permettent de convertir une valeur liée en une valeur différente, telle qu'un pinceau. Prenons l'exemple C# suivant :
<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>
Pour utiliser un convertisseur, incluez-le dans la section Window.Resources de votre XAML et liez l'arrière-plan de la cellule au convertisseur de valeur comme ceci :
<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>
Lier directement aux propriétés
Une autre façon de contrôler la couleur d'arrière-plan des cellules consiste à se lier directement à une propriété du modèle de données qui renvoie le pinceau souhaité. Cette méthode nécessite que vous gériez les notifications de modification de propriété pour garantir que la couleur d'arrière-plan est mise à jour lorsque les données sous-jacentes changent.
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!