我必须导入一个.ini文件,其中包含数据网格的数据,其格式如下:
Columns=2
Rows=10
Value_0_0=Header1
Value_1_0=Header2
Value_0_1= 12345
CellColor_0_1=255,0,0
....
并非每个单元格都必须具有颜色或值。在WinForms中,添加数据后更改单个单元格的背景颜色很容易,但是在wpf中...
当前,我生成一个数据表并设置datagrid.ItemsSource = Datatable.DefaultView
我阅读了有关wpf中单元格着色的一些答案,并尝试使用ItemContainerGenerator实现解决方案,如果启用RowVirtualization,该解决方案将失败。但是禁用虚拟化不是一种选择,行数可能很高,而如果没有虚拟化,行数会非常缓慢。
我还尝试通过各种方式将触发器与转换器一起使用
<DataGrid.Resources>
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding Column, RelativeSource={RelativeSource Self}, Converter={StaticResource ConditionCnvKey}}" Value="True" >
<Setter Property="Background" Value="{Binding color, Converter={StaticResource StringToColorCnvKey}}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
public class PropBasedStringToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
object result = null;
if (value == null) return "N/A";
if (value.GetType() == typeof(DataGridTextColumn))
{
string path = ((Binding)((DataGridTextColumn)value).Binding).Path.Path;
return path;
}
else if (value.GetType() == typeof(string))
{
result = new SolidColorBrush((Color)ColorConverter.ConvertFromString(value.ToString()));
}
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
但是由于列的变化,我无法检查预定义的列名,并且单元格不包含颜色值。
有人有什么建议吗?