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