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

时间:2014-11-12 18:06:37

标签: c# wpf

我希望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();
    }
}

但转换器没有效果。

enter image description here

3 个答案:

答案 0 :(得分:3)

因为所有常规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>

编辑:有关更多解决方案,请参阅Binding in a WPF data grid text column

答案 1 :(得分:0)

要更改的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>`

viewmodel中的代码是

 if(model.salesContribution<0)
{
model.ColorSet="Red";
}
else
{
model.ColorSet="Black";
}

添加颜色集变量为模型

public string  ColorSet { get; set; }

答案 2 :(得分:0)

我花了数小时来寻找转换器为何无法工作的错误。原因是我使用了错误的class CoapTestCase(IsolatedAsyncioTestCase): async def asyncSetUp(self): ... self.server = await aiocoap.Context.create_server_context(...) async def asyncTearDown(self): await self.server.shutdown()

Brushes

代替

System.Drawing.Brushes.Red;