Flex 4.6 ボタンの場合、ラベルとアイコンを定義できます。
<s:Button icon="{@Embed('assets/icon.png'}" label="Do the dance" />
対応するスキン パーツは次のとおりiconDisplay:BitmapImage
です。labelDisplay:IDisplayText
コンポーネント ( adobe ref ) によって設定されます。これらは ButtonBase.as で定義されています。
spark.components.supportClasses.ButtonBase
//--------------------------------------------------------------------------
//
// Skin parts
//
//--------------------------------------------------------------------------
[SkinPart(required="false")]
/**
* A skin part that defines an optional icon for the button.
*
* @langversion 3.0
* @playerversion Flash 10.1
* @playerversion AIR 2.0
* @productversion Flex 4.5
*/
public var iconDisplay:BitmapImage;
[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:IDisplayText;
spark.components.ButtonはButtonBaseを拡張し、いくつかの新しいスタイルと _emphasized プロパティを追加しますが、iconDisplay については何も言及していません。そのため、実際にボタンを描画するために使用される唯一のクラスはスキン クラスのようです。Flex で使用されるデフォルトのスキンであるspark.skins.spark.ButtonSkinに移動すると(またはそうですか?)、次のことがわかります。
<!-- layer 8: text -->
<!--- @copy spark.components.supportClasses.ButtonBase#labelDisplay -->
<s:Label id="labelDisplay"
textAlign="center"
maxDisplayedLines="1"
horizontalCenter="0" verticalCenter="1" verticalAlign="middle"
left="10" right="10" top="2" bottom="2">
</s:Label>
ラベルを表示できるようにしていますが、スキンには表示されてい<s:BitmapImage id="iconDisplay">
ないため、表示するコンテナーがないときにアイコンが表示されるのはなぜですか?