Индикаторы посещения дерева Flex - PullRequest
0 голосов
/ 26 октября 2009

Как указать историю посещений для компонента гибкого дерева? Я хочу выделить выбранные / посещенные узлы другим цветом и после этого не изменится, поэтому все посещенные узлы будут одного цвета.

Я попытался добавить атрибут в базовый XML с помощью

var selected:XML=app.treeObj.selectedItem as XML;
if(!selected.hasOwnProperty("visited"))
{
    selected.@visited = "true";

}

и иметь предметника для дерева, как показано ниже.

public class CustomTreeItemRenderer extends TreeItemRenderer
    {
        public function CustomTreeItemRenderer()
        {
            super();
        }

        override public function set data(value:Object):void
        {
            if(value !=null)
            {

                super.data = value;
                if(value.@visited=="true")
                {
                    setStyle("color", 0x000000);
                }

                invalidateDisplayList()

            }
        }

    }

Этот код сохраняет новый цвет, но он также меняет цвет узлов, которые вообще не посещаются. Что я здесь не так делаю? Есть ли лучший способ добиться этого?

Vipin

1 Ответ

2 голосов
/ 26 октября 2009

В ваших установленных данных вам нужно вернуть стиль к исходному, если он не был посещен, в противном случае, когда средство визуализации перерабатывается в не посещаемый узел, оно сохраняет посещенный цвет.

Try ...

override public function set data(value:Object):void
    {
            if(value !=null)
            {

                    super.data = value;
                    if(value.@visited=="true")
                    {
                            setStyle("color", 0x000000);
                    } 
                    else 
                    {
                            setStyle("color", originalColor);
                    }

                    invalidateDisplayList()

            }
    }

Не самый эффективный способ сделать это (вы будете устанавливать цвет, даже если вам это не нужно, а setStyle - дорогая операция), но это будет работать.

...