如何通过数值条件更改单元格的背景颜色?
例如,当价格大于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>
答案 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>
这将指示您的DataGridTextColumn
将Style
应用于其所有DataGridCell
子级,并且此Style
绑定每个{{1 }}到Background
的{{1}}属性。
您可以更改转换器代码以执行所需的任何类型的逻辑,为不同的范围提供多种颜色等。
您还可以定义更多的转换器和更多的DataGridCell
来更改其他属性。