首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建带有不可选分隔符的组合框

创建带有不可选分隔符的组合框
EN

Stack Overflow用户
提问于 2012-05-24 06:03:16
回答 3查看 3.2K关注 0票数 2

我想定制组合框。实际上,我喜欢创建一个combox,它有两个数组,两个数组由这样一条线分隔。

所有和大于40之间的行不能选择。

你知道怎么做吗?

感谢你的帮助

EN

回答 3

Stack Overflow用户

发布于 2012-05-24 07:02:35

假设我们有一个具有如下模型的ComboBox:

代码语言:javascript
复制
<s:ComboBox>
    <s:ArrayList>
        <fx:String>A</fx:String>
        <fx:Object />
        <fx:String>B</fx:String>
    </s:ArrayList>
</s:ComboBox>

字符串是我们的常规元素,对象代表分隔符。我在这里简化了事情,但您应该能够将其转换为您的特定情况。

现在,我们希望为每种类型的元素分配一个不同的ItemRenderer。我们可以通过itemRendererFunction属性来做到这一点。

代码语言:javascript
复制
<s:ComboBox itemRendererFunction="getItemRenderer">

private function getItemRenderer(item:*):IFactory {
    var renderer:Class = item is String ? DefaultItemRenderer : SeparatorItemRenderer
    return new ClassFactory(renderer);
}

现在,让我们创建只包含一条水平线的SeparatorItemRenderer,并将其enabled属性设置为false。最后这一部分非常重要,因为它将使项目不可选。

代码语言:javascript
复制
<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>

这应该就行了。

票数 2
EN

Stack Overflow用户

发布于 2012-05-24 07:32:16

在你的帮助下,我找到了一个解决方案:

代码语言:javascript
复制
<?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>

非常感谢

票数 0
EN

Stack Overflow用户

发布于 2012-09-29 03:51:00

这里有一个解决方案,可以在没有Flex的情况下在Flash中工作,以防有人需要它(就像我一样)。首先,为CellRenderer的自定义扩展创建一个新的类文件:

代码语言:javascript
复制
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时:

代码语言:javascript
复制
myComboBox.dropdown.setStyle("cellRenderer", MyCustomCellRenderer); 
myComboBox.dataProvider = new DataProvider();
myComboBox.dataProvider.addItem({label: "Normal Item"});
myComboBox.dataProvider.addItem({label: "Separator", disabled:true});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10728530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档