如何根据条件更改单元格的背景颜色?

时间:2019-10-12 13:40:02

标签: c# wpf xaml

如何通过数值条件更改单元格的背景颜色?

例如,当价格大于10时,背景颜色为红色。

我这样做了,但是该值保持不变,例如,我希望将其应用于所有大于100的值。 对不起,我的英语不好

  <DataGridTextColumn Binding="{Binding Price}"
        Header="Price">
        <DataGridTextColumn.ElementStyle>
            <Style TargetType="{x:Type TextBlock}">
                <Style.Triggers>
                    <Trigger Property="Text" Value="100">
                        <Setter Property="Foreground" Value="Red"/>
                        <Setter Property="FontWeight" Value="Bold"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGridTextColumn.ElementStyle>
    </DataGridTextColumn>

1 个答案:

答案 0 :(得分:0)

您可以使用IValueConverter将价格转换为颜色,并定义DataGridTextColumn.CellStyle以使用此转换器。

在您的代码中的某处定义

public class PriceToBackgroundColorConverter : IValueConverter {
    // Converts a value into a color.
    // Returns Red if value is greater than 100, else White.
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        int price = (int)value;
        if (price > 100) {
            return Brushes.Red;
        } else {
            return Brushes.White;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        throw new NotImplementedException();
    }
}

现在,您可以使用此转换器,方法是将其添加到Resources(或任何父控件)的DataGrid中,并使用Setter为所有DataGridCell对象设置样式

    <DataGrid ItemsSource="{Binding Items}">
        <DataGrid.Resources>
            <wpfapp1:PriceToBackgroundColorConverter x:Key="PriceToBackgroundColorConverter"></wpfapp1:PriceToBackgroundColorConverter>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Price}" Header="Price">
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="Background" Value="{Binding Path=Price, Converter={StaticResource PriceToBackgroundColorConverter}}"></Setter>
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>

这将指示您的DataGridTextColumnStyle应用于其所有DataGridCell子级,并且此Style绑定每个{{1 }}到Background的{​​{1}}属性。

您可以更改转换器代码以执行所需的任何类型的逻辑,为不同的范围提供多种颜色等。

您还可以定义更多的转换器和更多的DataGridCell来更改其他属性。