想要实现ComboBox下来出来一颗树,用itemRender来实现,只编写了最基本的代码,更多功能可以自己添加。
新建TreeComboBox.as 和 TreeComboBoxRender.as,(在src/components/TreeComboBox下)代码如下: TreeComboBox package components.TreeComboBox { import mx.controls.ComboBox; import mx.core.ClassFactory; public class TreeComboBox extends ComboBox { private var _factory:ClassFactory; public function get factory():ClassFactory { if (_factory == null) { _factory = new ClassFactory(); _factory.generator = TreeComboBoxRender; _factory.properties = { width:this.width, outerDocument:this }; } return _factory; } public function TreeComboBox() { super(); this.dropdownFactory = factory; } } } TreeComboBoxRender package components.TreeComboBox { import mx.controls.Tree; public class TreeComboBoxRender extends Tree { [Bindable] public var outerDocument:TreeComboBox; public function TreeComboBoxRender() { super(); } } } application 如下: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:rp="components.TreeComboBox.*"> <mx:Script> <![CDATA[ [Bindable] public var xml:XML = <root> <node label="a"/> <node label="b"/> <node label="c"/> </root> ]]> </mx:Script> <mx:VBox width="100%" height="100%"> <rp:TreeComboBox id="treeComboBox" dataProvider="{xml.children()}" labelField="@label" width="100"/> <mx:TextInput text="{treeComboBox.text}" width="200"/> </mx:VBox> </mx:Application> 结果如右图: |