【发布时间】:2010-06-11 21:14:01
【问题描述】:
我有一个带有自定义项渲染器的树控件。项目渲染器具有不同的状态,当将项目拖到项目渲染器上时应设置这些状态。我通过阅读这篇文章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>
...
【问题讨论】:
标签: apache-flex drag-and-drop tree flex4 itemrenderer