Je crois que je suis venu avec une solution, que je Je poste ci-dessous pour la postérité. Si quelqu'un a un meilleur moyen, j'apprécierais beaucoup la suggestion.
<!-- main app: TabBar implementation -->
<s:TabBar
dataProvider="{contentTabBarPrimaryDP}"
skinClass="skins.ContentTabBarSkin"/>
<!-- skins.ContentTabBarSkin: ItemRenderer implementation -->
<s:DataGroup id="dataGroup" width="100%" height="100%">
<s:layout>
<s:HorizontalLayout/>
</s:layout>
<s:itemRenderer>
<fx:Component>
<custom:IconButtonBarButton
label="{data.label}"
icon="{data.icon}"
skinClass="skins.ContentTabBarButtonSkin"/>
</fx:Component>
</s:itemRenderer>
</s:DataGroup>
<!-- skins.ContentTabBarButtonSkin: icon implementation -->
<s:HGroup
gap="3"
paddingBottom="3"
paddingLeft="3"
paddingRight="3"
paddingTop="3"
verticalAlign="middle">
<!--- layer 2: icon -->
<s:BitmapImage id="iconDisplay"
left="5"
verticalCenter="0" />
<!--- layer 3: label -->
<s:Label id="labelDisplay"
textAlign="center"
verticalAlign="middle"
maxDisplayedLines="1"
horizontalCenter="0" verticalCenter="1"
left="10"
right="10"
top="2"
bottom="2">
</s:Label>
</s:HGroup>
Cette solution utilise un objet DTO personnalisé pour le TabBar dataProvider qui stocke le texte de l'étiquette ainsi que l'image d'icône intégrée en tant que classe. Je devais aussi étendre la composante ButtonBarButton ajouter un iconDisplay SkinPart, qui ressemble à ceci:
[SkinPart(required="false")]
public var iconDisplay:BitmapImage;
Cette classe a également getters/setters pour l'icône propriété de classe et définit la source d'icône, en tant que telle:
public function set icon(value:Class):void {
_icon = value;
if (iconDisplay != null)
iconDisplay.source = _icon;
}
override protected function partAdded(partName:String, instance:Object):void {
super.partAdded(partName, instance);
if (icon !== null && instance == iconDisplay)
iconDisplay.source = icon;
}
Merci beaucoup pour les liens. Je ne vois toujours pas un moyen pour que l'habillage ButtonBarButton soit en direct aux données passées dans le composant TabBar pour afficher une icône différente pour chaque onglet. L'exemple Tour de Flex utilise une image codée en dur. Tout semble indiquer que vous ayez besoin d'étendre TabBar pour ajouter un support d'icône. Est-ce que quelqu'un a fait ça? Je suis encore en train de faire le tour de l'architecture skinning pour Spark, mais pour le moment, il semble que pour obtenir une réelle réutilisabilité, il faut implémenter des styles CSS personnalisés ou étendre le composant lui-même. Quelqu'un peut-il m'éclairer autrement? – BatFlexUser