【问题标题】:ItemRenderer for TreeColumn on AdvancedDataGrid in FlexFlex 中 AdvancedDataGrid 上 TreeColumn 的 ItemRenderer
【发布时间】:2010-04-14 15:42:59
【问题描述】:

是否可以为高级数据网格中的树列使用渲染器并仍然保留层次结构功能?如果我使用渲染器提供程序,我会丢失树下拉菜单的箭头。我想保留树功能并更改列的显示。(而不仅仅是文件夹图像)

<mx:AdvancedDataGridRendererProvider column="{titleCol}" depth="1"
        renderer="com.something.titleColumnRenderer"/>

titleColumnRenderer:

<mx:VBox width="100%" xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Label id="titleLabel" textAlign="center" text="sometext" width="100"/></mx:VBox>

【问题讨论】:

    标签: apache-flex itemrenderer advanceddatagrid


    【解决方案1】:

    我是这样做的:

    1. 创建一个扩展 AdvancedDataGridGroupItemRenderer 的类
    2. 在新类中覆盖 updateDisplayList 并做你需要做的事情
    3. 将新类分配给 AdvancedDataGrid 的 groupItemRenderer 属性

    这就是你的新班级的样子

    public class CustomGroupRenderer extends AdvancedDataGridGroupItemRenderer
    {
        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
        {
            super.updateDisplayList(unscaledWidth, unscaledHeight);
    
            var listData:AdvancedDataGridListData = listData as AdvancedDataGridListData;
            var advancedDataGrid:AdvancedDataGridDataGrid = listData.owner as AdvancedDataGrid;
    
            var cellBackgroundColor:uint = 0xFF0000;
    
            var g:Graphics = graphics;
            g.clear();
    
            if (!advancedDataGrid.isItemSelected(data) && !advancedDataGrid.isItemHighlighted(data))
            {
                g.beginFill(cellBackgroundColor);
                g.drawRect(0, 0, unscaledWidth, unscaledHeight);
                g.endFill();
            }
        }
    }
    

    然后将这个类赋给AdvancedDataGrid的groupItemRenderer属性:

    <mx:AdvancedDataGrid groupItemRenderer="com.whereever.CustomGroupRenderer"/>
    

    或者,在 ActionScript 中:

    myAdvancedDataGrid.groupItemRenderer = new ClassFactory(com.whereever.CustomGroupRenderer);
    

    【讨论】:

    • 这接近我需要的,但我不只是试图改变颜色。我想在其中添加一个 VBox 并将一些项目放入 VBox 中。我尝试了这个和 super.addChild ,但让应用程序冻结了。有什么想法吗?
    • 我认为您将不得不结合使用生命周期方法 createChildren(创建 vbox 和 vbox 子项)、measure(根据它的子项)和 updateDisplayList(将所有内容放置在渲染器中,例如文件夹图标、文件夹标签和您的 vbox)。此线程可能会有所帮助:forums.adobe.com/message/846259 - 有一些示例代码的链接可能会对您有所帮助。
    猜你喜欢
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    相关资源
    最近更新 更多