XamDataGridでセルの値に応じて行全体の色を変えてみましょう。完成イメージはこんな感じになります。
手順
1. DataRecordCellAreaのBackgroundプロパティにIValueConverterのインスタンスをバインドする。
DataRecordCellAreaをターゲットとするStyleのインスタンスをResourcesに追加し、Backgroundプロパティをセルの在庫数の値にバインドします。さらに、在庫数から色を返すIValueConverter(※手順2でコーディングします)を指定します。
Resourcesに追加したStyleと XamDataGridとの紐づけは、XamDataGridのFieldLayoutSettingsのDataRecordCellAreaStyleプロパティで行います。
<Window.Resources> <!-- IValueConverter(※実体は手順2でコーディングします) --> <local:StockedAmountToBrushConverter1 x:Key="stockedAmountToBrushConverter1"/> <!-- DataRecordCellAreaのStyle --> <Style TargetType="{x:Type igDP:DataRecordCellArea}" x:Key="myRecordStyle1"> <Setter Property="Background" Value="{Binding Cells[StockedAmount].Value, Converter={StaticResource stockedAmountToBrushConverter1}, Mode=OneWay}"/> </Style> </Window.Resources> ... <igDP:XamDataGrid> <igDP:XamDataGrid.FieldLayoutSettings> <!-- DataRecordCellAreaStyleプロパティにResourcesのStyleを指定 --> <igDP:FieldLayoutSettings DataRecordCellAreaStyle="{StaticResource myRecordStyle1}"/> </igDP:XamDataGrid.FieldLayoutSettings> </igDP:XamDataGrid>
2. IValueConverterの実体を作成する。
在庫数から色を返すIValueConverterをコーディングします。
public class StockedAmountToBrushConverter1 : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if(value != null) { // 渡されてきたvalue(=Cells[StockedAmount].Value(在庫数))を整数値に変換する。 int stockedAmount = (int)value; // 在庫数が20未満ならピンクを返す if (stockedAmount < 20) return new SolidColorBrush(Colors.Pink); // それ以外は白を返す else return new SolidColorBrush(Colors.White); } return Binding.DoNothing; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
以上で完成です。
なお、色を変える範囲が行全体ではなくセルだけでいい場合は、「XamDataGrid セルの値に応じてセルの色を変える」をご覧ください。
サンプル