0

我正在阅读一些弹性皮肤的来源,发现有一些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>

你可以看到有 和 的textGroupid labelDisplay。它们很重要,因为如果我使用其他 id,样式将不会应用于按钮。

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

我试图在源代码中搜索它们spark.components.Button.as,但没有找到任何相关内容。

4

2 回答 2

2

ID textGroup 和 labelDisplay 是蒙皮合同的一部分。如果您检查由 Button 类扩展的类 ButtonBase 的源代码,您会注意到:

[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 是皮肤中的 TextBase,并且 labelDisplay 皮肤部分在技术上不是必需的(required="false"),但没有它,Flex 将不会在 Button 控件上绘制标签。所需属性的默认值为 false。Button 类与其外观之间的约定规定,当您在按钮上设置 label 属性时,该值会被下推到外观中并修改 labelDisplay 外观部件文本的值(如果 labelDisplay 外观部件存在)。

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

于 2012-07-27T11:00:25.497 回答
1

检查http://help.adobe.com/en_US/flex/using/WSC8DB0C28-F7A6-48ff-9899-7957415A0A49.html 部分剥皮合同。

id 用于绑定皮肤中的皮肤部件实例和宿主组件中的逻辑。

于 2012-07-27T10:26:41.600 回答