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>

textGroupとの ID があることがわかりますlabelDisplay。他の ID を使用すると、スタイルがボタンに適用されないため、これらは重要です。

しかし、どの ID を使用すればよいか、どうすればわかりますか? textGroupそれはなぜlabelDisplayですか?宣言はどこで確認できますか?

のソースでそれらを検索しようとしましたがspark.components.Button.as、関連するものは見つかりませんでした。

4

2 に答える 2

2

ID の textGroup と labelDisplay は、スキニング コントラクトの一部です。ButtonBase クラスによって拡張された 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 に答える