C# 如何基于条件比较单元格值更改datagrid单元格颜色?
我对WPF和C#还相当陌生,所以如果这是一个新手问题,请原谅我。我有一个datagrid,它由datatable中的值填充。对于datagrid中的每一行,如果某个特定单元格的值大于另一个单元格的值,我希望突出显示该单元格。例如:C# 如何基于条件比较单元格值更改datagrid单元格颜色?,c#,wpf,datagrid,C#,Wpf,Datagrid,我对WPF和C#还相当陌生,所以如果这是一个新手问题,请原谅我。我有一个datagrid,它由datatable中的值填充。对于datagrid中的每一行,如果某个特定单元格的值大于另一个单元格的值,我希望突出显示该单元格。例如: | "A" | "B" | | 5 | 4 | <- A[0] would be highlighted yellow | 3 | 3 | <- A[1] would not be highlighted yellow 对于上面的代码,变
| "A" | "B" |
| 5 | 4 | <- A[0] would be highlighted yellow
| 3 | 3 | <- A[1] would not be highlighted yellow
对于上面的代码,变量color被设置为null,所以我显然做了一些错误的事情。我知道在每一行循环是低效的,但我很难找到更好的方法。理想情况下,我可以通过代码隐藏来实现这一点,因为我不能向XAML添加条件(至少我没有看到)。任何帮助都将不胜感激。谢谢 mvvm wpf数据网格技术单元格内容颜色 XMAL代码
<UserControl x:Class="RetailSoft.Stock_Reports.FrmCurrentItemWiseStock"
.....
xmlns:Converter="clr-namespace:RetailSoft.Converter"
>
<UserControl.Resources>
<Converter:PositiveNegativeConverter x:Key="PositiveNegativeConverter"/>
</UserControl.Resources>
我劝你不要那样做。由于虚拟化,这些单元可以循环使用,您将无休止地头疼。在网格上使用CellStyle并使用样式触发器设置背景。是否有方法检查XAML中的列“a”>列“B”?或者,有没有一种方法可以使用在一个单元格上有绑定但改变另一个单元格颜色的样式触发器?
<UserControl x:Class="RetailSoft.Stock_Reports.FrmCurrentItemWiseStock"
.....
xmlns:Converter="clr-namespace:RetailSoft.Converter"
>
<UserControl.Resources>
<Converter:PositiveNegativeConverter x:Key="PositiveNegativeConverter"/>
</UserControl.Resources>
<DataGridTextColumn
Header="Stock"
MinWidth="70" MaxWidth="1000"
x:Name="ProductName"
Binding="{Binding Stock}"
CellStyle="{StaticResource customCellStyle}"
>
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="TextBlock.Foreground" Value="{Binding Stock,Converter={StaticResource PositiveNegativeConverter}}"/>
</Style>
</DataGridTextColumn.ElementStyle>
<DataGridTextColumn.HeaderStyle>
<Style
TargetType="DataGridColumnHeader">
<Setter
Property="Background"
Value="SteelBlue"
/>
<Setter
Property="HorizontalContentAlignment"
Value="Center"
/>
<Setter
Property="Foreground"
Value="White"
/>
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>
public class PositiveNegativeConverter : IValueConverter
{
public object Convert(object Stock, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (Stock==null)
{
Stock = "";
}
string Stocks = Stock.ToString();
bool revert = (Stocks as string).StartsWith("-");
string stringValue = Stock as string;
string compareValue = parameter as string;
if (revert)
{
return Brushes.Tomato;
}
else
return Brushes.LimeGreen;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}