2017-12-18 5 views
0

WPF DataGrid가 있습니다. 비교할 필요가 있고 비교 결과에 따라 현재 열과 행에있는 두 셀의 셀 배경색을 설정하는 datetime 유형의 두 열이 있습니다. 각 DataGrid 행에 대해이 작업을 수행합니다. 이것을하기 위해서 저는 변환기를 사용합니다.WPF 변환기를 사용하여 DataGrid 셀 배경색을 변경하십시오.

<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."); 
    } 
} 

나는 두 가지 문제가 있습니다

  1. 때 갈색으로 날짜 1> 날짜 2 셀 배경 색상이되지 않는 업데이트합니다.
  2. 날짜 1 < = date2 인 경우 기본 DataGrid 셀 배경색이 반환되어야하며이를 수행하는 방법을 모르겠습니다.

또한 DataGrid의 행 스타일을 정의했습니다. 행 스타일은 일부 조건에 따라 전체 행 배경색을 설정합니다. 그러나이 경우 이러한 조건은 충족되지 않지만 위의 열 스타일 (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

관련 문제