2012-07-27 34 views
0

我正在阅读一些flex皮肤的来源,并发现有一些id属性,这似乎很重要。以一个“按钮”皮肤例如:如何理解flex皮肤的“id”属性?

<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
      minWidth="21" minHeight="21" 
      alpha.disabled="0.5"> 

    <!-- host component --> 
    <fx:Metadata> 
     <![CDATA[ 
     /** 
     * @copy spark.skins.spark.ApplicationSkin#hostComponent 
     */ 
     [HostComponent("spark.components.Button")] 
     ]]> 
    </fx:Metadata> 

    <!-- layer 8: text --> 
    <s:Group id="textGroup" verticalCenter="1" left="25"> 
     <s:filters> 
      <s:DropShadowFilter alpha="0.5" blurX="0" blurY="0" distance="1" /> 
     </s:filters> 
     <s:Label id="labelDisplay" 
       textAlign="center" 
       verticalAlign="middle" 
       maxDisplayedLines="1"> 
     </s:Label> 
    </s:Group> 

</s:SparkSkin> 

你可以看到也有textGrouplabelDisplay IDS。它们很重要,因为如果我使用其他ID,样式将不会应用于按钮。

但我怎么知道我应该使用什么ID?为什么它是textGrouplabelDisplay?我在哪里可以找到声明?

我试图在spark.components.Button.as的源中搜索它们,但没有找到任何相关的东西。

回答

2

IDs textGroup和labelDisplay是蒙皮合约的一部分。 如果您检查源ButtonBase Button类扩展的类,你会发现:

[SkinPart(required="false")] 

/** 
* A skin part that defines the label of the button. 
* 
* @langversion 3.0 
* @playerversion Flash 10 
* @playerversion AIR 1.5 
* @productversion Flex 4 
*/ 

public var labelDisplay:TextBase; 

在这里,你可以看到在声明告诉大家,labelDisplay的是在皮肤和该labelDisplay外观部分是TextBase在技​​术上不是必需的(required =“false”),但没有它,Flex不会在Button控件上绘制标签。所需属性的默认值为false。 Button类和它的皮肤之间的契约规定,当您在按钮上设置标签属性时,如果labelDisplay外观部件存在,则将值压入皮肤并修改labelDisplay外观部件文本的值。

所以基本上这意味着这些ID将被用在ButtonBase类中。通常不需要更改Ids,除非您的需求当然需要您这样做。在这种情况下,您还需要适当更改剥皮合同。