【问题标题】:WPF Change datagrid cell background color using a converterWPF 使用转换器更改数据网格单元格背景颜色
【发布时间】:2018-05-31 23:45:07
【问题描述】:

我有一个 WPF 数据网格。我需要比较两列日期时间类型的列,根据比较结果,我为当前列和行中的两个单元格设置单元格背景颜色。我为每个数据网格行执行此操作。为此,我使用了转换器。

<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. 当 date1 > date2 单元格背景颜色未更新为棕色时。
  2. 如果 date1

我还为数据网格定义了一个行样式。行样式根据某些条件设置整个行的背景颜色。但是在这种情况下,这些条件不满足,但上面的列样式(date1.Date > date2.Date)满足了,所以单元格背景应该涂成棕色。

利用这篇文章,如果满足行样式的条件,并且整个背景设置为橙色,如果单元格列样式(在这篇文章中)也满足并且需要涂成棕色,那么哪个占上风?行样式还是单元格样式?

【问题讨论】:

    标签: c# wpf datagrid datagridtextcolumn


    【解决方案1】:
    1. 返回一个Brush

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

    【讨论】:

    • 这正是我想要的。在职的!如果满足行样式和单元格样式,则以哪个为准?单元格样式设置的背景颜色的行样式设置的背景颜色?
    • 单元格在行的顶部。
    • 再次感谢您的大力帮助!
    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    相关资源
    最近更新 更多