我正在使用XamDataGrid(Infragistics-control)来显示一些分层数据。我可以拥有多达10个级别的对象,我需要能够为每个级别提供特定的背景颜色。我使用AssigningFieldLayoutToItem事件来获取项目的“级别”,我想最好在这里指定背景/样式。
我已经尝试过指定DataRecordCellArea风格甚至是CellValuePresenter风格,但我无法使用FieldLayouts来处理这些风格。
另一种解决方案是为每个级别编写一个FieldLayout,但这会产生大量不必要的XAML代码。
关于我应该做什么的任何建议?
答案 0 :(得分:1)
如果每个级别都有不同的FieldLayout,则可以使用单个样式将DataRecordPresenter与转换器一起设置背景。
XAML:
<local:BackgroundConverter x:Key="BackgroundConverter"/>
<Style TargetType="{x:Type igDP:DataRecordPresenter}">
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=FieldLayout.Key, Converter={StaticResource BackgroundConverter}}"/>
</Style>
转换器:
public class BackgroundConverter:IValueConverter
{
public BackgroundConverter()
{
this.Brushes = new Dictionary<string, Brush>();
}
public Dictionary<string, Brush> Brushes {get;set;}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is string)
{
string key = value.ToString();
if (this.Brushes.ContainsKey(key))
return this.Brushes[value.ToString()];
}
return Binding.DoNothing;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
以下内容将设置用于Key1和Key2字段的颜色:
BackgroundConverter backgroundConverter = this.Resources["BackgroundConverter"] as BackgroundConverter;
backgroundConverter.Brushes.Add("Key1", Brushes.Green);
backgroundConverter.Brushes.Add("Key2", Brushes.Yellow);
如果要为多个字段重复使用相同的FieldLayout,则可以使用InitializeRecord事件并将样式更改为绑定到DataRecord的Tag,如下所示:
XAML:
<Style TargetType="{x:Type igDP:DataRecordPresenter}">
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=Record.Tag}"/>
</Style>
C#:
void XamDataGrid1_InitializeRecord(object sender, Infragistics.Windows.DataPresenter.Events.InitializeRecordEventArgs e)
{
if (!e.ReInitialize)
{
// Set the tag to the desired brush.
e.Record.Tag = Brushes.Blue;
}
}
请注意,我没有添加用于确定要使用的画笔的条件逻辑,并且仍然需要针对不同的级别执行以具有不同的背景。