値に基づいて 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 サイトの他の関連記事を参照してください。