2014-06-17 3 views
4

Pour un bouton Flex 4.6, on peut définir une étiquette et une icône:Pourquoi l'apparence du bouton d'étincelle par défaut n'est-elle pas associée à la balise iconDisplay?

<s:Button icon="{@Embed('assets/icon.png'}" label="Do the dance" /> 

Les parties de la peau corrsesponding sont: iconDisplay:BitmapImage et labelDisplay:IDisplayText qui sont définis par le composant (adobe ref). Ils sont définis dans les 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 étend ButtonBase et ajoute quelques nouveaux styles et la propriété _emphasized mais ne mentionner quelque chose sur iconDisplay. Donc, il me semble que la seule classe utilisée pour dessiner le bouton est la classe de peau. Si nous allons à spark.skins.spark.ButtonSkin qui est la peau par défaut utilisé par Flex (ou est-il), nous trouverons:

<!-- 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> 

de sorte qu'une étiquette peut être affiché, mais la peau n'a pas <s:BitmapImage id="iconDisplay"> donc je ne comprends pas comment se fait l'icône est affichée lorsqu'il n'y a pas de conteneur pour le montrer?

Répondre

9

C'est parce que le ButtonSkin étend SparkButtonSkin qui a iconDisplay placé dans iconGroup et affiché avec constructIconParts(). Ce n'était pas très clair à cause de la syntaxe mxml pour étendre les classes (en utilisant <s:SparkButtonSkin> comme nœud racine pour ButtonSkin.mxml).

Il y a aussi une grande peau pour l'affichage des icônes de FXG évolutives dans un bouton: http://hulstkamp.com/articles/flex-advanced-fxg-spark-icon-buttons/

Questions connexes