【问题标题】:Colouring a hierarchical XamDataGrid为分层 XamDataGrid 着色
【发布时间】:2011-09-22 06:54:31
【问题描述】:

我正在使用 XamDataGrid(Infragistics 控件)来显示一些分层数据。我可以拥有多达 10 个级别的对象,并且我需要能够为每个级别赋予特定的背景颜色。我使用 AssigningFieldLayoutToItem 事件来获取项目的“级别”,我想最好也在这里分配背景/样式。

我已尝试指定 DataRecordCellArea 样式甚至 CellValuePresenter 样式,但我无法让其中任何一个与 FieldLayouts 一起使用。

另一种解决方案是为每个级别编写一个 FieldLayout,但这会创建很多不必要的 XAML 代码。

对我应该怎么做有什么建议吗?

【问题讨论】:

    标签: wpf xaml infragistics xamdatagrid


    【解决方案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 的标签,如下所示:

    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;
        }
    }
    

    请注意,我没有添加用于确定要使用的画笔的条件逻辑,并且仍然需要为不同的级别添加不同的背景。

    【讨论】:

      猜你喜欢
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      相关资源
      最近更新 更多