首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为分层XamDataGrid着色

为分层XamDataGrid着色
EN

Stack Overflow用户
提问于 2011-09-22 14:54:31
回答 1查看 1.8K关注 0票数 1

我正在使用一个XamDataGrid (信息控制)来显示一些分层的数据。这些对象,我可以有10个级别,我需要能够给每个级别一个特定的背景颜色。我使用AssigningFieldLayoutToItem-event来获取项目的“级别”,我想最好也在这里指定背景/样式。

我尝试过指定一个DataRecordCellArea样式,甚至是一个CellValuePresenter样式,但是我不能让它们中的任何一个与FieldLayouts一起工作。

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

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

EN

回答 1

Stack Overflow用户

发布于 2012-04-09 01:53:54

如果每个关卡都有不同的FieldLayout,则可以使用针对DataRecordPresenter的单一样式和转换器来设置背景。

XAML:

代码语言:javascript
复制
<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>

转换器:

代码语言:javascript
复制
    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字段的颜色:

代码语言:javascript
复制
BackgroundConverter backgroundConverter = this.Resources["BackgroundConverter"] as BackgroundConverter;
backgroundConverter.Brushes.Add("Key1", Brushes.Green);
backgroundConverter.Brushes.Add("Key2", Brushes.Yellow);

如果要对多个字段重用相同的FieldLayout,则可以使用InitializeRecord事件并将样式更改为绑定到DataRecord的标记,如下所示:

XAML:

代码语言:javascript
复制
    <Style TargetType="{x:Type igDP:DataRecordPresenter}">
    <Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=Record.Tag}"/>
</Style>

C#:

代码语言:javascript
复制
    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;
    }
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7510740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档