我正在阅读灵活皮肤的一些来源,并发现有一些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>
您可以看到有textGroup
和labelDisplay
的ID。它们很重要,因为如果我使用其他ID,则样式不会应用于按钮。
但我怎么知道我应该使用哪些ID?为什么textGroup
和labelDisplay
?我在哪里可以找到声明?
我尝试在spark.components.Button.as
的来源中搜索它们,但没有发现任何相关内容。
答案 0 :(得分:2)
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将不会在按钮控制。 required属性的默认值为false。 Button类与其外观之间的契约规定,当您在按钮上设置label属性时,如果labelDisplay外观部件存在,则该值将被下推到外观中并修改labelDisplay外观部件文本的值。
所以基本上这意味着这些ID将在ButtonBase类中使用。通常不需要更改ID,除非您的要求需要您这样做。在这种情况下,您还需要适当地更改外观合约。
答案 1 :(得分:1)
检查http://help.adobe.com/en_US/flex/using/WSC8DB0C28-F7A6-48ff-9899-7957415A0A49.html 皮肤合同部分。
id用于绑定皮肤中的皮肤部件实例和主机组件中的逻辑。