繁体   English   中英

如果值为负,WPF DataGridColumn 前景色变为红色

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM