ホームページ >バックエンド開発 >C++ >WPF DataGrid の個々のセルの背景色を値に基づいて条件付きで変更するにはどうすればよいですか?

WPF DataGrid の個々のセルの背景色を値に基づいて条件付きで変更するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-23 09:11:12625ブラウズ

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

セルの値に基づいて WPF DataGrid セルの背景色を変更します

WPF DataGrid では、セルの値に基づいてセルの外観をカスタマイズできます。ただし、スタイルを DataGridCell に直接適用すると、個々のセルではなく行全体に影響します。

回避策は、異なるセル内容を含む特定の列をターゲットにすることです。たとえば、「Name」列の値が「John」であるすべてのセルを強調表示するとします。

TextBlock ベースのセル

TextBlock を含む列の場合、列の ElementStyleTrigger を使用して、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。