セルの値に基づいて WPF DataGrid セルの背景色を変更します
WPF DataGrid では、セルの値に基づいてセルの外観をカスタマイズできます。ただし、スタイルを DataGridCell
に直接適用すると、個々のセルではなく行全体に影響します。
回避策は、異なるセル内容を含む特定の列をターゲットにすることです。たとえば、「Name」列の値が「John」であるすべてのセルを強調表示するとします。
TextBlock ベースのセル
TextBlock を含む列の場合、列の ElementStyle
で Trigger
を使用して、Text
値に基づいて 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>
値コンバーターメソッド
別の方法は、値コンバータを使用してセル値をブラシに変換することです:
<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>
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>
直接属性バインディング
Background
を目的のブラシを返すプロパティに直接バインドすることもできます:
<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>
XAML でのバインディング:
<code class="language-xml"><DataGridTextColumn Binding="{Binding Name}"> <DataGridTextColumn.ElementStyle> <Setter Property="Background" Value="{Binding NameBrush}"/> </DataGridTextColumn.ElementStyle> </DataGridTextColumn></code>
以上がWPF DataGrid の個々のセルの背景色を値に基づいて条件付きで変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。