[英]WPF DataGridColumn foreground color turn red if value is negative
我希望DataGridColumn
的前景色根据其值进行更改。 我有
<DataGridTextColumn x:Name="Diff1"
Binding="{Binding Change}" Header="Net Chng"
Width="*" IsReadOnly="True"
Foreground="{Binding Change,Converter={StaticResource negativeToColor}}">
</DataGridTextColumn>
和转换器
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();
}
}
但转换器显示没有效果。
这是因为所有常规DataGridColumn
绑定都是DataGrid
元素的相对对象,而不是 Row。 在 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>
编辑:有关更多解决方案,请参阅在 WPF 数据网格文本列中绑定。
如果值为负,则 DataGridColumn 的前景色根据其值更改,则颜色为红色,其他黑色 xmal 代码为`
<Local:AlphabetTextColumn
Header=" Contribution %"
x:Name="SalesaAmount2"
Binding="{Binding salesContribution}"
>
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="{Binding ColorSet}" />
</Style>
</DataGridTextColumn.ElementStyle>
</Local:AlphabetTextColumn>`
视图模型中的代码是
if(model.salesContribution<0)
{
model.ColorSet="Red";
}
else
{
model.ColorSet="Black";
}
添加颜色集变量是模型
public string ColorSet { get; set; }
我花了几个小时寻找转换器不工作的错误。 原因是我使用了错误的Brushes
:
System.Drawing.Brushes.Red;
代替
System.Windows.Media.Brushes.Red;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.