自我解释的问题,但为进一步明确,文本在单元格的PnL列将是随机的,如"-423.21"或"73.21"。我希望它只是改变单元格背景绿色,如果它是高于0和红色,如果它是低于。
这是我尝试过的:
<DataGridTextColumn Header="PnL" Binding="{Binding PnL}" Width="Auto">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding PnL}" Value="0">
<Setter Property="Background" Value="Orange" />
</DataTrigger>
<DataTrigger Binding="{Binding PnL}" Value="{x:Static sys:Double.MinValue}">
<Setter Property="Background" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding PnL}" Value="{x:Static sys:Double.MaxValue}">
<Setter Property="Background" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
2条答案
按热度按时间bqf10yzr1#
你可以为笔刷属性使用一个转换器。它可以包含你喜欢的笔刷颜色的所有逻辑。
这是我之前做的一个只显示红色和绿色。
这是通用的,检查控件的文本,但你可以绑定一个特定的已知属性。你也可以传递不同的画笔作为markupextension的属性。
可以将其与背景笔刷一起使用:
这是它在我的数据网格中工作的情况:
kkih6yb82#
您可以为此使用两个值转换器,一个小于转换器和一个大于转换器。
MSN有创建转换器的文档。https://learn.microsoft.com/en-us/dotnet/desktop/wpf/data/how-to-convert-bound-data
您也可以只使用两个转换器中的一个,并使用True和False两个触发器,但您需要确保Value=“0”的DataTrigger是声明顺序中的最后一个触发器,否则当值为0时,您将无法获得橙子背景。