Apache flex Flex中AdvancedDataGrid上TreeColumn的ItemRenderer

Apache flex Flex中AdvancedDataGrid上TreeColumn的ItemRenderer,apache-flex,itemrenderer,advanceddatagrid,Apache Flex,Itemrenderer,Advanceddatagrid,是否可以在advanceddatagrid中使用树柱的渲染器,并且仍然保留层次结构功能?如果使用渲染器提供程序,则会丢失树下拉列表的箭头。我想保留树功能并更改列的显示(而不仅仅是文件夹图像) 标题列渲染器: <mx:VBox width="100%" xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Label id="titleLabel" textAlign="center" text="sometext" width="10

是否可以在advanceddatagrid中使用树柱的渲染器,并且仍然保留层次结构功能?如果使用渲染器提供程序,则会丢失树下拉列表的箭头。我想保留树功能并更改列的显示(而不仅仅是文件夹图像)


标题列渲染器:

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

以下是我为实现这一目标所做的:

  • 创建扩展AdvancedDataGridGroupItemRenderer的类
  • 在新类中,重写updateDisplayList并执行需要执行的操作
  • 将新类分配给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"/>
    

    这是接近我需要的,但我不只是试图改变颜色。我想向其中添加一个VBox,并在VBox中放置一些项目。我尝试了这个和super.addChild,但是应用程序冻结了。有什么想法吗?我认为您必须结合使用生命周期方法createChildren(创建vbox和vbox子对象)、measure(根据子对象计算渲染器的宽度和高度)和updateDisplayList(定位渲染器内的所有内容,如文件夹图标、文件夹标签和vbox)。此线程可能会有所帮助:-这里有一个指向一些示例代码的链接,可能会对您有所帮助。
    <mx:AdvancedDataGrid groupItemRenderer="com.whereever.CustomGroupRenderer"/>
    
    myAdvancedDataGrid.groupItemRenderer = new ClassFactory(com.whereever.CustomGroupRenderer);