2010-06-24 24 views
2

J'abandonne. Espérons que je manque quelque chose de facile, mais j'ai l'impression de tirer les dents pour essayer de faire fonctionner ça. Tout ce que je veux, c'est un composant 'assistant' personnalisé dont les enfants sont placés dans un ViewStack et sous ViewStack il y a un bouton suivant et un bouton retour. Voici quelques extraits de code pour illustrer mon approche:Composant Flex 4 personnalisé avec les enfants insérés directement dans la pile de vues

WizardGroup.as:

[SkinPart(required="true")] 
    public var nextBt:Button = new Button(); 

    [SkinPart(required="true")] 
    public var backBt:Button = new Button(); 

    [SkinPart(required="true")] 
    public var stack:ViewStackSpark = new ViewStackSpark(); 

WizardGroupSkin.mxml:

 <s:VGroup width="100%" height="100%" 
        paddingBottom="10" paddingTop="10" paddingLeft="10" paddingRight="10"> 
      <container:ViewStackSpark id="stack" width="100%" height="100%"> 
       <s:Group id="contentGroup" width="100%" height="100%" minWidth="0" minHeight="0"/> 
      </container:ViewStackSpark> 
      <s:HGroup horizontalAlign="right" width="100%"> 
       <s:Button id="nextBt" label="Next" enabled="{hostComponent.permitNext}" enabled.last="false"/> 
       <s:Button id="backBt" label="Back" enabled="{hostComponent.permitBack}" enabled.first="false"/> 
      </s:HGroup> 
     </s:VGroup> 

Même si cela est très proche de travailler, le problème majeur est que la les enfants du composant WizardGroup ne sont pas ajoutés en tant qu'enfants du viewstack. Au lieu de cela, ils sont ajoutés en tant qu'enfants du groupe de contenu. Ainsi, la viewstack aura toujours un seul enfant: contentGroup. J'ai également essayé l'approche de lier le contenu de la pile de vue aux enfants de contentGroup, mais avec les conteneurs Spark, il n'y a aucun moyen d'accéder à un tableau d'enfants ou un tableau d'éléments (ie, il n'y a aucun contentGroup. getChildren() ou contentGroup.getElements())

Des idées? Merci tout le monde.

Répondre

2

J'ai finalement compris. L'astuce consiste à définir la propriété par défaut du WizardGroup à un tableau de membre public que je fais appel « contenu »

[DefaultProperty("content")] 
public class WizardGroup extends TitleWindow 
{ 
    [SkinPart(required="true")] 
    public var nextBt:Button = new Button(); 

    [SkinPart(required="true")] 
    public var backBt:Button = new Button(); 

    [Bindable] 
    public var content:Array; 

Et puis dans la peau, lier le contenu du ViewStack au tableau de contenu du hostComponent:

 <s:VGroup width="100%" height="100%" 
        paddingBottom="10" paddingTop="10" paddingLeft="10" paddingRight="10"> 
      <container:ViewStackSpark id="stack" width="100%" height="100%" content="{hostComponent.content}"/> 
      <s:HGroup horizontalAlign="right" width="100%"> 
       <s:Button id="nextBt" label="Next" enabled="{hostComponent.permitNext}" enabled.last="false"/> 
       <s:Button id="backBt" label="Back" enabled="{hostComponent.permitBack}" enabled.first="false"/> 
      </s:HGroup> 
     </s:VGroup>