私はWPFデータグリッドを持っています。比較する必要がある datetime 型の 2 つの列があり、比較結果に従って、現在の列と行の 2 つのセルにセルの背景色を設定します。これをデータグリッド行ごとに行います。これを行うには、コンバーターを使用します。
<my:DataGridTextColumn Binding="{Binding Path=Date1, StringFormat=\{0:dd/MM/yyyy\}}" Header="Date">
<my:DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource CellDateColorConverter}">
<Binding Path="Date1"/>
<Binding Path="Date2"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</my:DataGridTextColumn.ElementStyle>
</my:DataGridTextColumn>
<my:DataGridTextColumn Binding="{Binding Path=Date2, StringFormat=\{0:dd/MM/yyyy\}}" Header="Date">
<my:DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource CellDateColorConverter}">
<Binding Path="Date1"/>
<Binding Path="Date2"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</my:DataGridTextColumn.ElementStyle>
</my:DataGridTextColumn>
コンバーター:
public class CellDateColorConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values[0] is DateTime && values[1] is DateTime)
{
DateTime date1 = (DateTime)values[0];
DateTime date2= (DateTime)values[1];
if (date1.Date > date2.Date)
{
return Color.Brown;
}
}
return ????? // I need to return the default datagrid cell's background color. How to do this?
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException("CellDateColorConverter is a OneWay converter.");
}
}
ここで 2 つの問題があります。
- date1 > date2 セルの背景色が茶色に更新されていない場合。
- date1 <= date2 の場合、デフォルトのデータグリッド セルの背景色が返されるはずですが、これを行う方法がわかりません。
また、データグリッドの行スタイルを定義しました。行スタイルは、いくつかの条件に従って行全体の背景色を設定します。ただし、この場合、これらの条件は満たされませんが、上記の列スタイル (date1.Date > date2.Date) では満たされるため、セルの背景を茶色で塗りつぶす必要があります。
この投稿を利用して、行スタイルの条件が満たされ、たとえば背景全体がオレンジに設定されている場合、セルの列スタイル (この投稿の上記) も満たされ、茶色でペイントする必要がある場合、どちらが優先されますか? 行のスタイルまたはセルのスタイル?