Как я могу заставить средство визуализации элементов дерева перерисовывать во время операции перетаскивания?

У меня есть древовидный элемент управления с настраиваемым средством визуализации элементов. Средство визуализации элементов имеет разные состояния, которые должны быть установлены, когда элемент перетаскивается через средство визуализации элементов. Из этого сообщения http://forums.adobe.com/message/2091088 я понял, что «правильный способ» сделать это - переопределить метод getCurrentState и добавить текст. Я делаю это.

Теперь в моем древовидном элементе управления я обрабатываю событие перетаскивания и получаю ссылку на перетаскиваемый объект рендеринга, и устанавливаю для логического свойства dragOver значение true. Теперь мне просто нужно заставить мой itemRenderer перерисовать. Я не могу понять этого. Обходной путь - просто установить currentState для itemRenderer.

Тогда мой вопрос, как я могу заставить мой 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>

...

person swidnikk    schedule 11.06.2010    source источник


Ответы (1)


Дерево - это объект ListBase, поэтому попробуйте вызвать treeObject.invalidateList ().

Может быть более эффективный способ, связанный только с itemRenderer, но invalidateList () решал все мои проблемы с рендерингом ListBase в прошлом.

person orlade    schedule 12.06.2010
comment
Нет ... похоже, не работает. Я догадываюсь, что перетаскивание мешает (dragEnabled, dropEnabled, dragMoveEnabled все верно). Для дерева есть dropIndicator ... но мне нужны средства визуализации элементов, чтобы показать их визуальное состояние. Я собираюсь взглянуть на Adobe Jira и посмотреть, откопаю ли я что-нибудь. - person swidnikk; 14.06.2010