flex 4   sdk 4.5.1   

 

生成一个默认的combobox

  

然后在设计模式 --属性--样式--外观 --创建外观  为combobox设置新的皮肤:

 

flex 去掉combobox中的竖直分割线_第1张图片

自动生成如下的皮肤文件:

 

   
   
   
   
  1. xml version="1.0" encoding="utf-8"?> 
  2. <s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"   
  3.         xmlns:fb="http://ns.adobe.com/flashbuilder/2009" alpha.disabled=".5">   
  4.       
  5.      
  6.     <fx:Metadata> 
  7.          
  8.         /**   
  9.         * @copy spark.skins.spark.ApplicationSkin#hostComponent  
  10.         */  
  11.         [HostComponent("spark.components.ComboBox")]  
  12.         ]]> 
  13.     fx:Metadata>   
  14.       
  15.     <s:states> 
  16.         <s:State name="normal" /> 
  17.         <s:State name="open" /> 
  18.         <s:State name="disabled" /> 
  19.     s:states> 
  20.       
  21.      
  22.              
  23.             <s:RectangularDropShadow id="dropShadow" blurX="20" blurY="20" alpha="0.45" distance="7"   
  24.                                      angle="90" color="#000000" left="0" top="0" right="0" bottom="0"/> 
  25.  
  26.    
  27.               
  28.              
  29.              
  30.             <s:Rect id="background" left="1" right="1" top="1" bottom="1" > 
  31.                 <s:fill> 
  32.                      
  33.             <s:Scroller id="scroller" left="0" top="0" right="0" bottom="0" hasFocusableChildren="false" minViewportInset="1"> 
  34.                  
  35.                 <s:DataGroup id="dataGroup" itemRenderer="spark.skins.spark.DefaultItemRenderer"> 
  36.                     <s:layout> 
  37.                         <s:VerticalLayout gap="0" horizontalAlign="contentJustify" requestedMinRowCount="1" requestedMaxRowCount="6"/> 
  38.                     s:layout> 
  39.                 s:DataGroup>   
  40.             s:Scroller> 
  41.         s:Group> 
  42.     s:PopUpAnchor> 
  43.       
  44.      
  45.     <s:TextInput id="textInput" enabled.disabled="false" 
  46.                  left="0" right="18" top="0" bottom="0"   
  47.                  skinClass="spark.skins.spark.ComboBoxTextInputSkin"/>   
  48.       
  49. s:SparkSkin> 
  50.  

我删掉了生成的文件里面所有标签里面的东西以及

其中:

                skinClass="spark.skins.spark.ComboBoxButtonSkin" tabEnabled="false" /> 

控制下拉按钮的样式;

                   left="0" right="18" top="0" bottom="0"
                 skinClass="spark.skins.spark.ComboBoxTextInputSkin"/>

控制显示框的样式。

然后,为Button 和 textinput 的skinClass属性分别设置新的皮肤 如下:
                  skinClass="skins.ComboboxButtonSkin" tabEnabled="false" />  
                      left="0" right="18" top="0" bottom="0"
                 skinClass="skins.ComboBoxTextInputSkin"/> 
 其中   skins.ComboboxButtonSkin为 skins包下的ComboboxButtonSkin.mxml,代码如下:

 

   
   
   
   
  1. xml version="1.0" encoding="utf-8"?> 
  2.  
  3. <s:SparkButtonSkin xmlns:fx="http://ns.adobe.com/mxml/2009"   
  4.                    xmlns:s="library://ns.adobe.com/flex/spark"   
  5.                    xmlns:fb="http://ns.adobe.com/flashbuilder/2009" 
  6.                    minWidth="21" minHeight="21"   
  7.                    alpha.disabled="0.5"> 
  8.       
  9.     <fx:Metadata> 
  10.          
  11.         /**   
  12.         * @copy spark.skins.spark.ApplicationSkin#hostComponent  
  13.         */  
  14.         [HostComponent("spark.components.Button")]  
  15.         ]]> 
  16.     fx:Metadata> 
  17.       
  18.       
  19.      
  20.     <s:states> 
  21.         <s:State name="up" /> 
  22.         <s:State name="over" /> 
  23.         <s:State name="down" /> 
  24.         <s:State name="disabled" /> 
  25.     s:states> 
  26.     <s:Rect left="2" right="2" top="2" bottom="2" id="border" height="20"> 
  27.         <s:fill> 
  28.             <s:SolidColor color="#FFFFFF" alpha="1.0" /> 
  29.         s:fill> 
  30.     s:Rect> 
  31.     <s:Rect left="1" right="1" top="1" bottom="1" id="fill"> 
  32.         <s:fill> 
  33.             <s:LinearGradient> 
  34.                 <s:GradientEntry color="#FFFFFF" alpha="0.5"/> 
  35.             s:LinearGradient> 
  36.         s:fill> 
  37.     s:Rect> 
  38.     <s:Path right="6" verticalCenter="0" id="arrow" 
  39.             data="M 4.0 4.0 L 4.0 3.0 L 5.0 3.0 L 5.0 2.0 L 6.0 2.0 L 6.0 1.0 L 7.0 1.0 L 7.0 0.0 L 0.0 0.0 L 0.0 1.0 L 1.0 1.0 L 1.0 2.0 L 2.0 2.0 L 2.0 3.0 L 3.0 3.0 L 3.0 4.0 L 4.0 4.0"> 
  40.          <s:fill> 
  41.             <s:RadialGradient rotation="90" focalPointRatio="1"> 
  42.                 <s:GradientEntry  color="0" alpha="0.6" /> 
  43.                 <s:GradientEntry  color="0" alpha="0.8" /> 
  44.                 s:RadialGradient> 
  45.         s:fill> 
  46.     s:Path> 
  47.  
  48. s:SparkButtonSkin> 

skins.ComboBoxTextInputSkin"为skins包下的ComboBoxTextInputSkin,代码如下:

 

   
   
   
   
  1. xml version="1.0" encoding="utf-8"?> 
  2. --> 
  3. <s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
  4.              xmlns:fb="http://ns.adobe.com/flashbuilder/2009"   
  5.              alpha.disabledStates="0.5" blendMode="normal"> 
  6.       
  7.     <fx:Metadata> 
  8.          
  9.         /**   
  10.         * @copy spark.skins.spark.ApplicationSkin#hostComponent  
  11.         */  
  12.         [HostComponent("spark.components.TextInput")]  
  13.         ]]> 
  14.     fx:Metadata>   
  15.       
  16.       
  17.     <s:states> 
  18.         <s:State name="normal"/> 
  19.         <s:State name="disabled" stateGroups="disabledStates"/> 
  20.         <s:State name="normalWithPrompt"/> 
  21.         <s:State name="disabledWithPrompt" stateGroups="disabledStates"/> 
  22.     s:states> 
  23.       
  24.        
  25.      
  26.     <s:Rect left="1" right="1" top="1" bottom="1" id="border"> 
  27.         <s:fill> 
  28.             <s:SolidColor color="0xFFFFFF" /> 
  29.         s:fill> 
  30.     s:Rect> 
  31.       
  32.      
  33.      
  34.     <s:Rect id="background" left="1" right="1" top="1" bottom="1"> 
  35.         <s:stroke> 
  36.             <s:SolidColorStroke color="#FFFFFF" weight="2" id="bgFill"/> 
  37.         s:stroke> 
  38.     s:Rect> 
  39.       
  40.      
  41.      
  42.     <s:Rect left="1" top="1" right="1" height="1" id="shadow"> 
  43.         <s:fill> 
  44.             <s:SolidColor color="0xFFFFFF" alpha="1.0" /> 
  45.         s:fill> 
  46.     s:Rect> 
  47.       
  48.      
  49.      
  50.     <s:RichEditableText id="textDisplay" 
  51.                         verticalAlign="middle" 
  52.                         widthInChars="10" 
  53.                         left="1" right="1" top="1" bottom="1" /> 
  54.      
  55.     <s:Label id="promptDisplay" maxDisplayedLines="1" 
  56.              verticalAlign="middle" 
  57.              mouseEnabled="false" mouseChildren="false" 
  58.              includeIn="normalWithPrompt,disabledWithPrompt"   
  59.              includeInLayout="false" 
  60.              /> 
  61.       
  62. s:SparkSkin> 

然后修改本文开头的自动生成的combobox的皮肤文件,为它加一个边框border:

 

   
   
   
   
  1.        s:Group> 
  2.    s:PopUpAnchor> 
  3.  
      
       
                 alpha="0.5625"/>
                 alpha="0.75" />
       

      

     
  4.     
  5.    <s:TextInput id="textInput" enabled.disabled="false" 
  6.                 left="0" right="18" top="0" bottom="0"   
  7.                 skinClass="skins.ComboBoxTextInputSkin"/>  

这样就会生成如下图所示的没有竖直分隔符的combobox:

本方法的具体思想就是:利用ComboboxButtonSkin   和 ComboBoxTextInputSkin两个皮肤文件,去掉Button 和 textInput的边框,然后为Combobox整体添加一个边框。另外,我删了所有生成的文件里面的标签里面的内容,因为我也不知道干什么的,但是删了以后不影响实现设计- -

  学习ING。。