2011-12-21 54 views
1

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

youcombobox instant.setStyle(“arrowButtonWidth”,0);

我们如何才能做到火花comobobox?

感谢,

回答

3

创建隐藏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。

+0

@flextras:我正在尝试这个https://www.flextras.com/免费自动完成组合框。 :)并需要删除这个向下按钮。我需要按照相同的步骤吗?我认为你是最好的人回答。 – TrexTroy 2011-12-21 19:35:29

+0

是的,你必须遵循相同的步骤。创建一个自定义外观并删除向下箭头。我非常肯定,我发布在这个答案中的皮肤应该适用于我们的自动完成功能。 – JeffryHouser 2011-12-21 19:43:13