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

Apache flex flex 4:mx |树如何禁用悬停和选择颜色?,apache-flex,flex4,tree,Apache Flex,Flex4,Tree,这是与我的第一个问题相关的第二个问题: 我想禁用悬停和选择颜色,这样当用户选择一个项目时,它的背景不会改变颜色。这怎么可能 更新 我不想选择选择和悬停颜色。背景包含一个图像,因此它不会有用。我需要完全禁用颜色 另一个更新 我试图重写树类,但没有成功 这是覆盖树类的类: package components.popups.WelcomeBack { import mx.controls.listClasses.IListItemRenderer; import mx.controls.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>

谢谢

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

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

我有好消息和坏消息。好消息是这真的很容易。坏消息是您需要对树进行子类化

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方法并调用超类上的方法,愚弄它,使其认为没有选择、突出显示或“插入”的内容。插入符号用于通过键盘更改选择。不确定转换参数的作用是什么,如果仍然有一些影响困扰您,您可以将其作为始终为false发送

编辑

在查看相关问题后,我发现问题的根源是使用新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);  
    }
}
奖金-覆盖IsItemSelective,以防止在单击项目时进行选择(您仍然可以通过键盘选择项目,尽管没有视觉提示):


在jss的方法中,您可能可以使用4通道颜色:

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

谢谢,很遗憾,这并不能解决我的问题。我需要的颜色是透明的,因为背景包含一个图像。我无法选择特定的颜色,不幸的是,它没有解决问题。我可能做错了什么。我将代码粘贴到我的主要帖子上。请告诉我最新情况。谢谢,请编辑它,这样我们就可以看到你使用的是什么树组件了?基本上,重要的是使用新的tree类,而不是旧的tree类。另外,请确保您已清除浏览器缓存,或者至少它已加载您的新版本。我更新了我的答案以应对您的情况。在相关问题上使用您的代码进行了测试。谢谢。这种方法也很有效,但我更喜欢知道如何覆盖,这样就不会从一开始就绘制选择和滚动颜色。
<mx:Tree rollOverColor="#00FFFFFF" selectionColor="#00FFFFFF"