У меня есть дерево управления с пользовательским средством визуализации элементов. Средство визуализации элементов имеет различные состояния, которые должны быть установлены во время перетаскивания элемента поверх средства визуализации элементов. Прочитав этот пост http://forums.adobe.com/message/2091088, я понимаю, что «правильный способ» сделать это - переопределить метод getCurrentState и добавить некоторый текст. Я делаю это.
Теперь в своем древовидном элементе управления я обрабатываю событие перетаскивания и получаю ссылку на перетаскиваемый элемент, и я устанавливаю логическое свойство dragOver на true. Теперь мне просто нужно заставить мой itemRenderer перерисовать. Я не могу понять это. Обходной путь - просто установить currentState элемента itemRenderer.
Тогда мой вопрос, как я могу заставить свой itemRenderer обновиться? (и я попытался вызвать validateNow, invalidideDisplayList / 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>
...