我希望 a 的前景色DataGridColumn根据其值改变。我有
<DataGridTextColumn x:Name="Diff1"
Binding="{Binding Change}" Header="Net Chng"
Width="*" IsReadOnly="True"
Foreground="{Binding Change,Converter={StaticResource negativeToColor}}">
</DataGridTextColumn>
Run Code Online (Sandbox Code Playgroud)
和转换器
public class negativeToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
SolidColorBrush brush = new SolidColorBrush(Colors.LimeGreen);
double doubleValue = 0.0;
Double.TryParse(value.ToString(), out doubleValue);
if (doubleValue < 0)
brush = new SolidColorBrush(Colors.Red);
return brush;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
但转换器显示没有效果。

这是因为所有常规DataGridColumn绑定都是DataGrid元素的相对对象,而不是行。在 DataGrid 级别中没有名为 的属性Change,仅在行级别中。
解决方法是:使用DataGridTemplateColumn.
<DataGridTemplateColumn Header="Net Chng" Width="*" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Change}" Foreground="{Binding Change, Converter={StaticResource negativeToColorConverter}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
编辑:有关更多解决方案,请参阅在 WPF 数据网格文本列中绑定。