我正在尝试为DataGrid
中具有特定值的每个单元格设置特定颜色。我在网上看到了很多,但我没有找到一个接近我的情况。
基本上我有这个DataGrid
结构:
<DataGrid ItemsSource="{Binding MatchService.Matches}" AutoGenerateColumns="False"
CanUserAddRows="false" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="{DynamicResource championship}" Binding="{Binding Competition}"/>
<DataGridTextColumn Header="1" Binding="{Binding HomeWin}"/>
<DataGridTextColumn Header="X" Binding="{Binding Draw}"/>
</DataGrid.Columns>
所以我需要使用纯xaml解决方案,特别是处理所有单元格值的通用样式。例如,如果HomeWin
单元格的值为<50
,则单元格背景将为red
,如果单元格值为>60
,则背景将为绿色。
如何创建默认样式并为每个DataGridTextColumn
绑定它而不使用write converter等?
感谢。
答案 0 :(得分:1)
1.创建一个NumberToBrush转换器,如下所示:
[ValueConversion(typeof(int), typeof(Brush))]
public class NumberToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int val = (int)value;
if (val < 50)
return Brushes.Red;
if (val > 60)
return Brushes.Green;
return Brushes.Transparent;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
2.将其添加到您的查看资源:
<Window.Resources>
<wpfApplication1:NumberToBrushConverter x:Key="NumberToBrushConverter"/>
</Window.Resources>
3.使用DataGridTemplateColumn而不是DataGridTextColumn并重新定义DataTemplate以使用带有绑定值的转换器:
<DataGrid.Columns>
<DataGridTemplateColumn Header="X">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="wpfApplication1:YourModel">
<TextBox Text="{Binding X}" Background="{Binding Path=X, Converter={StaticResource NumberToBrushConverter}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>