簡體   English   中英

WPF 使用轉換器更改數據網格單元格背景顏色

[英]WPF Change datagrid cell background color using a converter

我有一個 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 <= date2,則應返回默認的 datagrid 單元格背景顏色,但我不知道如何執行此操作。

我還為數據網格定義了行樣式。 行樣式根據某些條件設置整行背景顏色。 但在這種情況下,這些條件不滿足,但上面的列樣式(date1.Date > date2.Date)滿足,所以單元格背景應該塗成棕色。

利用這個帖子,如果滿足行樣式的條件,並且整個背景設置為例如橙色,如果單元格列樣式(在此帖子中)也滿足並且需要繪制為棕色,那么哪個占上風? 行樣式還是單元格樣式?

  1. 返回Brush

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM