簡體   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