我想要一个树节点渲染器,其行为如下:
我尝试过如下:创建一个从UIComponent派生的自定义类 然后将其插入树节点渲染器中,但由于某种原因它无法正常工作。
以下是代码:
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import mx.controls.Tree;
import mx.core.UIComponent;
public class Expander extends UIComponent
{
public var expanded : Boolean = false;
public function Expander()
{
super();
this.redraw();
this.addEventListener( MouseEvent.CLICK, onClick );
}
private function redraw( newWidth : Number = 60, newHeight : Number = 20 ) : void
{
this.graphics.clear();
this.graphics.beginFill( 0x0000FF, 0.7 );
this.graphics.drawRect( 0, 0, newWidth, newHeight );
this.graphics.endFill();
}
private function onClick( e : MouseEvent ) : void
{
e.stopImmediatePropagation();
colapseExpand();
}
private function colapseExpand() : void
{
expanded = ! expanded;
if( expanded )
redraw( this.width, 100 );
else
redraw();
( parent as Tree ).invalidateSize();
}
}
}
这是渲染器类代码:
<?xml version="1.0" encoding="utf-8"?>
<s:MXTreeItemRenderer 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:lx="*">
<s:states>
<s:State name="normal" />
<s:State name="hovered" />
<s:State name="selected" />
</s:states>
<s:HGroup left="0" right="0" top="0" bottom="0" verticalAlign="middle">
<s:Rect id="indentationSpacer" width="{treeListData.indent}" percentHeight="100" alpha="0">
<s:fill>
<s:SolidColor color="0xFFAFFF" />
</s:fill>
</s:Rect>
<s:Group id="disclosureGroup">
<s:BitmapImage source="{treeListData.disclosureIcon}" visible="{treeListData.hasChildren}" />
</s:Group>
<s:BitmapImage source="{treeListData.icon}" />
<s:Label id="labelField" text="{treeListData.label}" paddingTop="2"/>
<lx:Expander width="100%">
</lx:Expander>
</s:HGroup>
</s:MXTreeItemRenderer>
自定义类标记为lx:Expander width="100%"
。
答案 0 :(得分:4)
您要做的是使用variableRowHeight="true"
创建树,然后在项呈示器中,您可以使用状态“展开”项呈示器:
<?xml version="1.0" encoding="utf-8"?>
<s:MXTreeItemRenderer 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:lx="*">
<s:states>
<s:State name="normal" />
<s:State name="hovered" />
<s:State name="selected" />
</s:states>
<s:HGroup height.selected="75">
<s:Label text="Not expanded" text.selected="EXPANDED!" />
</s:HGroup>
</s:MXTreeItemRenderer>
当选择项呈示器时,应展开,但我没有测试它。您的树可能需要具有“selectable = true”属性,或者您始终可以在项呈示器中的单击事件中手动更改状态。