flex 4: mx | Дерево, как я могу отключить наведение и выбор цвета? - PullRequest
3 голосов
/ 10 февраля 2011

это второй вопрос, связанный с моим первым вопросом по адресу:

Flex 4: mx | tree - как я могу отключить выбор элементов?

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

update

Я не хочу выбирать выделение и цвета при наведении.фон содержит изображение, поэтому оно не будет полезным.Мне нужно полностью отключить цвета.

другое обновление

Я попытался переопределить класс Tree, но безуспешно.

это класс, который переопределяет класс дерева:

package components.popups.WelcomeBack {
import mx.controls.listClasses.IListItemRenderer;
import mx.controls.Tree;

/**
 * @author ufk
 */
public class TreeNoSelection extends Tree {

     protected override function drawItem(item:IListItemRenderer,
                            selected:Boolean = false,
                            highlighted:Boolean = false,
                            caret:Boolean = false,
                            transition:Boolean = false):void
    {
        super.drawItem(item, false, false, false, transition);  
    }

}


}

и это мой фактический компонент дерева:

<?xml version="1.0" encoding="utf-8"?>
<WelcomeBack:TreeNoSelection xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx"
     xmlns:WelcomeBack="components.popups.WelcomeBack.*" folderClosedIcon="{null}" defaultLeafIcon="{null}"
     folderOpenIcon="{null}" 
     showRoot="false"  
            allowMultipleSelection="false" allowDragSelection="false" labelField="@label">
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

<fx:Script>
    <![CDATA[
        import ItemRenderer.WelcomeBackTreeItemRenderer;
        private var _themeLibrary:Object;

        public function get themeLibrary():Object {
            return this._themeLibrary;
        }

        public function set themeLibrary(tl:Object):void {
            this._themeLibrary=tl;
            var cf:ClassFactory = new ClassFactory();
            cf.generator = ItemRenderer.WelcomeBackTreeItemRenderer;
            cf.properties = {
                _themeLibrary:this._themeLibrary
            };
            this.itemRenderer=cf;
        }

    ]]>
</fx:Script>

</WelcomeBack:TreeNoSelection>

спасибо

Ответы [ 3 ]

4 голосов
/ 16 февраля 2011

У меня хорошие и плохие новости.Хорошей новостью является то, что это действительно легко.Плохая новость заключается в том, что вам нужно создать подкласс дерева.

package custom
{
    import mx.controls.Tree;
    import mx.controls.listClasses.IListItemRenderer;

    public class CustomTree extends Tree
    {
         protected override function drawItem(item:IListItemRenderer,
                                selected:Boolean = false,
                                highlighted:Boolean = false,
                                caret:Boolean = false,
                                transition:Boolean = false):void
        {
            super.drawItem(item, false, false, false, transition);  
        }

    }
}

Таким образом, здесь происходит то, что мы перехватываем метод drawItem и вызываем метод в суперклассе, заставляя его думать, что ничего не выбрано, не выделено или не "выделено".Каретка предназначена для того, чтобы изменить выбор с клавиатуры.Не уверен, для чего нужен параметр перехода, вы можете отправить его как всегда ложное, если вам все еще мешают какие-то эффекты.

Редактировать

После просмотраВ связи с этим я обнаружил, что корень проблемы - средство визуализации элементов, использующее новую архитектуру искры, что означает, что средства визуализации отвечают за реагирование на особые состояния (выбранный, выделенный, показать каретку).Таким образом, при использовании средства визуализации искрового элемента есть еще 3 функции, которые также необходимо переопределить:

public class CustomTree extends Tree
{
    public override function isItemShowingCaret(data:Object):Boolean
    {
        return false;
    }

    public override function isItemHighlighted(data:Object):Boolean
    {
        return false;
    }

    public override function isItemSelected(data:Object):Boolean
    {
        return false;
    }

    protected override function drawItem(item:IListItemRenderer,
                                         selected:Boolean = false,
                                         highlighted:Boolean = false,
                                         caret:Boolean = false,
                                         transition:Boolean = false):void
    {
        super.drawItem(item, false, false, false, transition);  
    }
}

Bonus - переопределить isItemSelectable, чтобы предотвратить выбор при нажатии на элемент (вы все равно можете выбрать их с помощью клавиатуры, хотя прине намекайте на это):

public override function isItemSelectable(data:Object):Boolean
{
     return false;
}
3 голосов
/ 18 февраля 2011

Вы можете использовать 4-канальные цвета с подходом jss:

<mx:Tree rollOverColor="#00FFFFFF" selectionColor="#00FFFFFF"

... включая альфа-канал (при полной прозрачности) в выборе цвета.

3 голосов
/ 10 февраля 2011

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

<mx:Tree rollOverColor="#FFFFFF" selectionColor="#FFFFFF"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...