这是与我的第一个问题有关的第二个问题:
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>
感谢
答案 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通道(完全透明)。