1

私は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 つの問題があります。

  1. date1 > date2 セルの背景色が茶色に更新されていない場合。
  2. date1 <= date2 の場合、デフォルトのデータグリッド セルの背景色が返されるはずですが、これを行う方法がわかりません。

また、データグリッドの行スタイルを定義しました。行スタイルは、いくつかの条件に従って行全体の背景色を設定します。ただし、この場合、これらの条件は満たされませんが、上記の列スタイル (date1.Date > date2.Date) では満たされるため、セルの背景を茶色で塗りつぶす必要があります。

この投稿を利用して、行スタイルの条件が満たされ、たとえば背景全体がオレンジに設定されている場合、セルの列スタイル (この投稿の上記) も満たされ、茶色でペイントする必要がある場合、どちらが優先されますか? 行のスタイルまたはセルのスタイル?

4

1 に答える 1

4
  1. を返しますBrush:

    if (date1.Date > date2.Date)
    {
        return System.Windows.Media.Brushes.Brown;
    }
    
  2. 戻るSystem.Windows.Data.Binding.DoNothing

于 2017-12-18T15:53:30.923 に答える