【问题标题】:flex 4: mx|Tree how can i disable hover and selection colors?flex 4: mx|Tree 如何禁用悬停和选择颜色?
【发布时间】:2011-02-10 13:46:10
【问题描述】:

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

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>

谢谢

【问题讨论】:

    标签: apache-flex flex4 tree


    【解决方案1】:

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

    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);  
        }
    }
    

    奖励 - 覆盖 isItemSelectable 以防止在单击项目时进行选择(您仍然可以通过键盘选择它们,尽管不会有视觉提示):

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

    【讨论】:

    • 不幸的是,它没有解决问题。我可能做错了什么。我将代码粘贴到我的主要帖子中。请更新我。谢谢
    • 您能否编辑它,使我们可以实际看到您正在使用的 Tree 组件?基本上重要的是使用新的树类而不是旧的树类,在你的情况下是 TreeNoSelection。另外,请确保您已清除浏览器缓存,或者至少它会加载您的新版本。
    • 我更新了我的答案来处理你的情况。在相关问题上使用您的代码进行了测试。
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,不幸的是,这并不能解决我的问题。我需要颜色是透明的,因为背景包含图像。我无法选择特定的颜色
    【解决方案3】:

    你也许可以使用 jss 的方法使用 4 通道颜色:

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

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

    【讨论】:

    • 谢谢。这个方法也有效,但我更喜欢知道如何覆盖,所以选择和翻转颜色不会被绘制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2014-02-15
    • 2016-04-07
    相关资源
    最近更新 更多