如何在拖放操作期间强制树项目渲染器重绘?

时间:2010-06-11 21:14:01

标签: flex drag-and-drop tree flex4 itemrenderer

我有一个带有自定义项目渲染器的树形控件。项目渲染器具有不同的状态,应在项目渲染器上拖动项目时设置这些状态。我从阅读这篇文章http://forums.adobe.com/message/2091088中了解到,执行此操作的“正确方法”是覆盖“getCurrentState”方法并附加一些文本。我这样做。

现在在我的树形控件中,我处理拖动事件并获得对被拖过的itemrenderer的引用,并将布尔“dragOver”属性设置为true。现在我只需要强制我的itemRenderer重绘。我无法弄明白。解决方法是,只设置itemRenderer的currentState。

我的问题是,如何强制我的itemRenderer刷新? (我试过调用validateNow,invalideDisplayList / Properties / Size,但没有用)

<?xml version="1.0" encoding="utf-8"?>
<s:MXTreeItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx">

    <fx:Script>
        <![CDATA[           
            import mx.events.DragEvent;
            import mx.events.FlexEvent;

            import spark.layouts.supportClasses.DropLocation;

            public var dragOver:Boolean = false;

            override protected function getCurrentRendererState():String
            {

                var skinState:String = super.getCurrentRendererState();

                if( dragOver )
                    skinState += "AndDragOver";

                trace('getCurrentRendererState', skinState);
                return skinState;
            }

        ]]>
    </fx:Script>

    <s:states>
        <s:State name="normal" />            
        <s:State name="hovered" />
        <s:State name="selected" />
        <s:State name="normalAndDragOver" stateGroups="dragOverGroup" />            
        <s:State name="hoveredAndDragOver" stateGroups="dragOverGroup" />
        <s:State name="selectedAndDragOver" stateGroups="dragOverGroup" />
    </s:states>

...

1 个答案:

答案 0 :(得分:0)

Tree是一个ListBase对象,因此请尝试调用treeObject.invalidateList()。

可能有一种更有效的方式与itemRenderer相关,但invalidateList()在过去解决了我的所有ListBase渲染问题。