【问题标题】:flex spark comboboxflex 火花组合框
【发布时间】:2011-12-21 17:16:56
【问题描述】:

我需要删除 spark 组合框的向下箭头。我可以像这样做 mx 组件。

youcombobox instant.setStyle("arrowButtonWidth", 0);

我们如何在 spark comobobox 中做到这一点?

谢谢,

【问题讨论】:

    标签: actionscript-3 apache-flex flex4


    【解决方案1】:

    创建一个隐藏 openButton 的自定义外观。这是必需的皮肤部件,因此您必须将其可见性设置为 false。

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    
    ADOBE SYSTEMS INCORPORATED
    Copyright 2008 Adobe Systems Incorporated
    All Rights Reserved.
    
    NOTICE: Adobe permits you to use, modify, and distribute this file
    in accordance with the terms of the license agreement accompanying it.
    
    --> 
    <!--- The default skin class for the Spark ComboBox component. 
    The skin for the anchor button for a ComboBox component 
    is defined by the ComboBoxButtonSkin class.  The skin for the text input
    is defined by the ComboBoxTextInputSkin class.
    
    @see spark.components.ComboBox        
    @see spark.skins.spark.ComboBoxButtonSkin
    
    @langversion 3.0
    @playerversion Flash 10
    @playerversion AIR 1.5
    @productversion Flex 4
    -->
    <s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:fb="http://ns.adobe.com/flashbuilder/2009" alpha.disabled=".5"> 
    
        <!-- host component -->
        <fx:Metadata>
            <![CDATA[ 
            /** 
            * @copy spark.skins.spark.ApplicationSkin#hostComponent
            */
            [HostComponent("spark.components.ComboBox")]
            ]]>
        </fx:Metadata> 
    
        <fx:Script fb:purpose="styling">
            <![CDATA[       
                private var paddingChanged:Boolean;
                private var cornerRadiusChanged:Boolean;
                private var cornerRadius:Number = 0;            
    
                /* Define the content fill items that should be colored by the "contentBackgroundColor" style. */
                static private const contentFill:Array = ["bgFill"];
    
                /**
                 * @private
                 */
                override public function get contentItems():Array {return contentFill};
    
                /**
                 *  @private
                 */
                override protected function commitProperties():void
                {
                    super.commitProperties();
    
                    if (paddingChanged && textInput)
                    {
                        // Push padding styles into the textDisplay
                        var padding:Number;
    
                        padding = getStyle("paddingLeft");
                        if (textInput.getStyle("paddingLeft") != padding)
                            textInput.setStyle("paddingLeft", padding);
    
                        padding = getStyle("paddingTop");
                        if (textInput.getStyle("paddingTop") != padding)
                            textInput.setStyle("paddingTop", padding);
    
                        padding = getStyle("paddingRight");
                        if (textInput.getStyle("paddingRight") != padding)
                            textInput.setStyle("paddingRight", padding);
    
                        padding = getStyle("paddingBottom");
                        if (textInput.getStyle("paddingBottom") != padding)
                            textInput.setStyle("paddingBottom", padding);
                        paddingChanged = false;
                    }
    
                    if (cornerRadiusChanged)
                    {
                        cornerRadiusChanged = false;
    
                        /* var cr:Number = getStyle("cornerRadius");
    
                        if (openButton)
                        openButton.setStyle("cornerRadius", cr);
                        if (textInput)
                        textInput.setStyle("cornerRadius", cr); */
                    }
                }
    
                /**
                 *  @private
                 */
                override public function styleChanged(styleProp:String):void
                {
                    var allStyles:Boolean = !styleProp || styleProp == "styleName";
    
                    super.styleChanged(styleProp);
    
                    if (allStyles || styleProp.indexOf("padding") == 0)
                    {
                        paddingChanged = true;
                        invalidateProperties();
                    }
                    if (allStyles || styleProp == "cornerRadius")
                    {
                        cornerRadiusChanged = true;
                        invalidateProperties();
                    }                
                }
    
                /**
                 * @private
                 */
                override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
                {
                    if (getStyle("borderVisible") == false)
                    {
                        if (border)
                            border.visible = false;
                        if (background)
                        {
                            background.left = background.top = background.right = background.bottom = 0;
                        }
                        if (scroller)
                            scroller.minViewportInset = 0;
                    }
                    else
                    {
                        if (border)
                            border.visible = true;
                        if (background)
                        {
                            background.left = background.top = background.right = background.bottom = 1;
                        }
                        if (scroller)
                            scroller.minViewportInset = 1;
                    }
    
                    if (dropShadow)
                        dropShadow.visible = getStyle("dropShadowVisible");
    
                    //openButton.setStyle("cornerRadius", getStyle("cornerRadius"));
    
                    if (borderStroke)
                    {
                        borderStroke.color = getStyle("borderColor");
                        borderStroke.alpha = getStyle("borderAlpha");
                    }
                    super.updateDisplayList(unscaledWidth, unscaledHeight);
                }
            ]]>
        </fx:Script>
    
        <s:states>
            <s:State name="normal" />
            <s:State name="open" />
            <s:State name="disabled" />
        </s:states>
    
        <!--- 
            The PopUpAnchor control that opens the drop-down list. 
    
            <p>In a custom skin class that uses transitions, set the 
            <code>itemDestructionPolicy</code> property to <code>none</code>.</p>
        -->
        <s:PopUpAnchor id="popUp"  displayPopUp.normal="false" displayPopUp.open="true" includeIn="open"
                       left="0" right="0" top="0" bottom="0" itemDestructionPolicy="auto"
                       popUpPosition="below" popUpWidthMatchesAnchorWidth="true">
    
            <!--- 
                This includes borders, background colors, scrollers, and filters. 
                @copy spark.components.supportClasses.DropDownListBase#dropDown
            -->
            <s:Group id="dropDown">
    
                <!-- drop shadow -->
                <!--- @private -->
                <s:RectangularDropShadow id="dropShadow" blurX="20" blurY="20" alpha="0.45" distance="7" 
                                         angle="90" color="#000000" left="0" top="0" right="0" bottom="0"/>
    
                <!-- border -->
                <!--- @private -->
                <s:Rect id="border" left="0" right="0" top="0" bottom="0">
                    <s:stroke>
                        <!--- @private -->
                        <s:SolidColorStroke id="borderStroke" weight="1"/>
                    </s:stroke>
                </s:Rect>
    
                <!-- fill -->
                <!--- Defines the appearance of drop-down list's background fill. -->
                <s:Rect id="background" left="1" right="1" top="1" bottom="1" >
                    <s:fill>
                        <!---  
                            @private
                            The color of the drop down's background fill.
                            The default color is 0xFFFFFF.
                        -->
                        <s:SolidColor id="bgFill" color="0xFFFFFF" />
                    </s:fill>
                </s:Rect>
    
                <!--- @private -->
                <s:Scroller id="scroller" left="0" top="0" right="0" bottom="0" hasFocusableChildren="false" minViewportInset="1">
                    <!--- @copy spark.components.SkinnableDataContainer#dataGroup-->
                    <s:DataGroup id="dataGroup" itemRenderer="spark.skins.spark.DefaultItemRenderer">
                        <s:layout>
                            <s:VerticalLayout gap="0" horizontalAlign="contentJustify" requestedMinRowCount="1" requestedMaxRowCount="6"/>
                        </s:layout>
                    </s:DataGroup> 
                </s:Scroller>
            </s:Group>
        </s:PopUpAnchor>
    
        <!---  The default skin is ComboBoxButtonSkin. 
                @copy spark.components.supportClasses.DropDownListBase#openButton
                @see spark.skins.spark.ComboBoxButtonSkin -->
    <!---- my only change is here ---->
            <s:Button id="openButton" width="19" right="0" top="0" bottom="0" focusEnabled="false"
                      skinClass="spark.skins.spark.ComboBoxButtonSkin" tabEnabled="false" visible="false" />  
            <!--- @copy spark.components.ComboBox#textInput -->
            <s:TextInput id="textInput" enabled.disabled="false"
                         left="0" right="18" top="0" bottom="0" 
                         skinClass="spark.skins.spark.ComboBoxTextInputSkin"/> 
    
        </s:SparkSkin>
    

    像这样使用它:

    <?xml version="1.0" encoding="utf-8"?>
    <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                           xmlns:s="library://ns.adobe.com/flex/spark" 
                           xmlns:mx="library://ns.adobe.com/flex/mx">
    
        <s:ComboBox skinClass="com.flextras.skins.ComboBoxNoDownArrow">
            <s:dataProvider>
                <mx:ArrayCollection>
                    <fx:String>Flash</fx:String> 
                    <fx:String>Director</fx:String> 
                    <fx:String>Dreamweaver</fx:String> 
                    <fx:String>ColdFusion</fx:String> 
                    <fx:String>Flash</fx:String> 
                    <fx:String>Director</fx:String> 
                    <fx:String>Dreamweaver</fx:String> 
                    <fx:String>ColdFusion</fx:String> 
                    <fx:String>Flash</fx:String> 
                    <fx:String>Director</fx:String> 
                    <fx:String>Dreamweaver</fx:String> 
                    <fx:String>ColdFusion</fx:String> 
                </mx:ArrayCollection>           
            </s:dataProvider>
        </s:ComboBox>
    </s:WindowedApplication>
    

    如果需要,您可能可以对皮肤进行更多调整;例如,将 textInput 上的“Right”值更改为 0。启动 Flash Builder 比编写代码花费了更多时间,因此我建议您通读 this documentation 作为 spark 架构作品中的 Skinning 的参考。

    【讨论】:

    • @flextras :我正在尝试这个flextras.com 免费自动完成组合框。 :) 并且需要删除此向下箭头按钮。我是否必须遵循相同的步骤?我认为你是最适合回答的人。
    • 是的,您必须遵循相同的步骤。创建自定义皮肤并删除向下箭头。我很确定我在这个答案中发布的皮肤应该可以使用我们的自动完成功能。
    猜你喜欢
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多