2010-06-11 59 views
0

我有一个自定义项目渲染器的树控件。项目渲染器具有不同的状态,应在项目被拖动到项目渲染器上时进行设置。通过阅读这篇文章http://forums.adobe.com/message/2091088,我明白了做到这一点的'正确方法'是重写'getCurrentState'方法并附加一些文本。我这样做。如何强制树项目渲染器在拖放操作期间重绘?

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

我的问题然后,我该如何强制我的itemRenderer刷新? (我已经打过电话validateNow,invalideDisplayList /属性/尺寸,但没有成功)

<?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> 

... 

回答

0

树是是ListBase对象,所以尝试调用treeObject.invalidateList()。

可能有一个更有效的方法与itemRenderer单独相关,但invalidateList()已经解决了我以前的所有ListBase渲染问题。

+0

不...似乎没有工作。我的直觉是拖放干扰(dragEnabled,dropEnabled,dragMoveEnabled全部为true)。树的dropIndicator ...但我需要项目渲染器来显示它们的视觉状态。我将看看Adobe的jira,看看我是否挖掘了任何东西。 – swidnikk 2010-06-14 04:57:24