2017-12-18 32 views
0

私はWPFデータグリッドを持っています。比較する必要があるdatetime型の2つの列があり、比較結果に応じて、現在の列と行の2つのセルのセルの背景色を設定します。私は各DataGrid行に対してこれを行います。これを行うために、私はコンバータを使用します。日付1> date2のセルの背景色が茶色に更新されていないときにWPF変換を使用してDataGridセルの背景色を変更します。

  1. <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つの問題を抱えています。

  2. 日付1 < = date2の場合、デフォルトのデータグリッドセルの背景色が返される必要がありますが、これを行う方法はわかりません。

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

この記事を利用して、行スタイルの条件が満たされ、背景全体がたとえばオレンジ色に設定されている場合、セル列スタイル(この記事の上)も満たされていて、それはどれが勝つ?行スタイルまたはセルスタイル?

答えて

2
  1. 戻りBrush

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

+0

これはまさに私が欲しいものです。ワーキング!行スタイルとセルスタイルが満たされている場合は、どれが優先されますか?行スタイルで設定された背景色セルスタイルで設定された背景色のスタイル? – user1624552

+1

セルが行の上にあります。 – mm8

+0

大変お手伝いしてくれてありがとう! – user1624552

関連する問題