我想自定义组合框。确实,我喜欢创建一个组合框,其中两个数组由一条线隔开。
All 和 40 以上之间的行不能选择。
你知道怎么做吗?
感谢您的帮助
我想自定义组合框。确实,我喜欢创建一个组合框,其中两个数组由一条线隔开。
All 和 40 以上之间的行不能选择。
你知道怎么做吗?
感谢您的帮助
假设我们有一个具有如下模型的 ComboBox:
<s:ComboBox>
<s:ArrayList>
<fx:String>A</fx:String>
<fx:Object />
<fx:String>B</fx:String>
</s:ArrayList>
</s:ComboBox>
Strings 是我们的常规元素,Object 代表分隔符。我在这里简化了事情,但是您应该能够将其转换为您的具体情况。
现在我们要为每种类型的元素分配一个不同的 ItemRenderer。我们可以通过itemRendererFunction
属性来做到这一点。
<s:ComboBox itemRendererFunction="getItemRenderer">
private function getItemRenderer(item:*):IFactory {
var renderer:Class = item is String ? DefaultItemRenderer : SeparatorItemRenderer
return new ClassFactory(renderer);
}
现在让我们创建SeparatorItemRenderer
只包含一条水平线并将其enabled
属性设置为false
. 最后一部分非常重要,因为它会使项目不可选择。
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
autoDrawBackground="false" enabled="false"
height="10" disabledAlpha="1">
<s:Line left="0" right="0" verticalCenter="0">
<s:stroke>
<s:SolidColorStroke color="0xdddddd" />
</s:stroke>
</s:Line>
</s:ItemRenderer>
那应该这样做。
在您的帮助下,我找到了解决方案:
<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
autoDrawBackground="{(data.separator==0)?true:false}"
disabledAlpha="1"
enabled="{(data.separator==0)?true:false}"
mouseEnabled="{(data.separator==0)?true:false}"
>
<fx:Script>
<![CDATA[
import spark.components.supportClasses.ListBase;
]]>
</fx:Script>
<s:states>
<s:State name="normal"/>
<s:State name="down"/>
<s:State name="hovered"/>
<s:State name="selected"/>
<s:State name="dragging"/>
<s:State name="normalAndShowCaret"/>
<s:State name="hoveredAndShowCaret"/>
<s:State name="selectedAndShowCaret"/>
</s:states>
<s:Group top="2" left="2" right="2" bottom="2" width="100%" height="100%" >
<s:Line width="100%" bottom="2" visible="{(data.separator==1)?true:false}" verticalCenter="0" >
<s:stroke>
<s:SolidColorStroke weight="2" caps="round"/>
</s:stroke>
</s:Line>
<s:Label id="labelDisplay" verticalCenter="1" horizontalCenter="0" fontWeight="normal" color="#000000"
visible="{(data.separator==0)?true:false}" />
</s:Group>
</s:ItemRenderer>
非常感谢
这是一个在没有 Flex 的情况下在 Flash 中工作的解决方案,以防万一有人需要(就像我一样)。首先为 CellRenderer 的自定义扩展创建一个新的类文件:
package {
import fl.controls.listClasses.CellRenderer;
public class MyCustomCellRenderer extends CellRenderer
{
// override the data setter to set the enabled flag
override public function set data(value:Object):void
{
super.data = value;
this.enabled = !(value['disabled']);
}
}
}
将它保存为 MyCustomCellRenderer.as(或任何你称之为的),然后当你设置你的 ComboBox 时:
myComboBox.dropdown.setStyle("cellRenderer", MyCustomCellRenderer);
myComboBox.dataProvider = new DataProvider();
myComboBox.dataProvider.addItem({label: "Normal Item"});
myComboBox.dataProvider.addItem({label: "Separator", disabled:true});