flex 4:mx |树如何禁用悬停和选择颜色?

时间:2011-02-10 13:46:11

标签: flex flex4 tree

这是与我的第一个问题有关的第二个问题:

Flex 4: mx|tree - how can i disable items selection?

我想禁用悬停和选择颜色,因此当用户选择项目时,它的背景不会改变颜色。怎么可能?

更新

我不想选择颜色和悬停颜色。背景包含图像,因此无用。我需要完全禁用颜色。

另一次更新

我试图覆盖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 个答案:

答案 0 :(得分:4)

我有好消息和坏消息。好消息是它真的很容易。坏消息是你需要继承树。

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方法并调用超类上的方法,欺骗它认为没有选择,突出显示或“关注”。当您通过键盘更改选择时,插入符号用于表示。不确定转换参数是什么,如果仍然有一些影响困扰你,你可以像往常一样发送它。

修改

在查看相关问题之后,我发现问题的根源是使用新Spark结构的项目渲染器,这意味着渲染器负责对特殊状态做出反应(选中,突出显示,显示插入符号) 。因此,在使用spark项呈示器时,还有其他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);  
    }
}

奖励 - 覆盖isItemSelectable以防止在点击某个项目时进行选择(你仍然可以通过键盘选择它们,虽然没有视觉暗示):

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

答案 1 :(得分:3)

您可以在树上使用 rollOverColor selectionColor 样式。有不同的方式来设置样式,但在这里我将它们设置为白色,将颜色更改为您的背景颜色。

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

答案 2 :(得分:3)

您可以使用jss方法使用4通道颜色:

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

...包括颜色选择中的Alpha通道(完全透明)。