我希望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();
}
}
但转换器没有效果。
答案 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;