繁体   English   中英

如何理解柔韧性皮肤的“ id”属性?

[英]How to understand the “id” attribute of flex skin?

我正在阅读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>

您可以看到存在id的textGrouplabelDisplay 它们很重要,因为如果我使用其他ID,则样式将不会应用于按钮。

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

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

ID 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是TextBase,从技术上讲,不需要labelDisplay皮肤部件(required =“ false”),但是如果没有声明,Flex不会在Button控件上绘制标签。 必需属性的默认值为false。 Button类及其外观之间的约定规定,当您在按钮上设置label属性时,如果labelDisplay外观部件存在,则将值向下推入外观并修改labelDisplay外观部件的文本的值。

因此,从本质上讲,这意味着这些ID将在ButtonBase类中使用。 通常,除非您的要求当然需要更改ID,否则通常无需更改ID。 在这种情况下,您也需要适当更改换肤合同。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM