ホームページ > バックエンド開発 > C++ > WPF DataGrid: 値に基づいて行ではなくセルの色を変更する方法?

WPF DataGrid: 値に基づいて行ではなくセルの色を変更する方法?

Barbara Streisand
リリース: 2025-01-23 09:17:10
オリジナル
988 人が閲覧しました

WPF DataGrid: How to Change Cell, Not Row, Color Based on Value?

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

WPF DataGrid をカスタマイズするとき、特定の値に基づいて異なるセルの色を適用したい場合があります。これを行うには、DataGrid 列の XAML でスタイルまたは値コンバーターを使用できます。しかし、ターゲット セルではなく行全体に誤って影響を与えるスタイルに遭遇した場合はどうなるでしょうか?

問題分析

この問題が発生した場合は、個々のセルではなく行全体に適用される DataGrid の CellStyle プロパティを参照していることが原因である可能性があります。この問題を解決するには、DataGrid の特定の列ごとに CellStyle プロパティを指定する必要があります。

列にスタイルを適用する

個々のセルの外観をカスタマイズするには、代わりに列の ElementStyle プロパティをターゲットにします。たとえば、特定の値 (たとえば、「名前」列の「ジョン」) を持つすべてのセルを強調表示したい場合は、次の XAML を使用できます:

<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>
ログイン後にコピー

この方法を使用すると、指定された基準を満たすセルにのみ色の変更が適用されます。

値コンバーターを使用する

スタイルの使用に加えて、値コンバーターを利用してセルの色を変更することもできます。値コンバータを使用すると、バインドされた値をブラシなどの別の値に変換できます。次の C# の例を考えてみましょう:

<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 の Window.Resources セクションにコンバーターを含めて、次のようにセルの背景を値コンバーターにバインドします。

<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>
ログイン後にコピー

プロパティに直接バインド

セルの背景色を制御するもう 1 つの方法は、目的のブラシを返すデータ モデル内のプロパティに直接バインドすることです。この方法では、基礎となるデータが変更されたときに背景色が更新されるように、プロパティ変更通知を処理する必要があります。

以上がWPF DataGrid: 値に基づいて行ではなくセルの色を変更する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート