2009-08-20 2 views
0

J'ai un PopUpButton qui contient seulement 2 actions. Les deux actions sont complètement opposées l'une à l'autre et commutent une propriété booléenne sur un objet de true à false ou false à true. Pour éviter la redondance, je n'ai qu'une seule action à la fois. Donc, si la propriété est vraie, l'action pour la changer en vrai n'est pas montrée.Flex 3: Comment puis-je changer un PopupButton en un bouton normal quand il n'y a qu'un seul élément de menu disponible?

Si mon menu PopUp a une seule option, je voudrais supprimer le menu d'être affiché et essentiellement revenir à la PopUpButton pour agir et ressembler à un bouton ordinaire. Jusqu'à présent, je n'ai pas vraiment trouvé un bon moyen de le faire en ActionScript sans ajouter, supprimer ou modifier des styles pour le bouton.

Existe-t-il un moyen agréable de dire simplement au bouton de cacher le basculement de PopUp?

PS: Dans mon exemple spécifique, OUI il pourrait être plus facile si je viens d'utiliser un bouton bascule. Cependant, je souhaite réutiliser ce bouton lorsque je traite un tableau d'objets. Si j'en ai plusieurs, la propriété pourrait être vraie et fausse en même temps. Dans ce cas, je veux montrer le menu afin qu'ils puissent choisir l'option pour définir toutes les propriétés de l'objet.

Répondre

1

Vous pourriez essayer d'utiliser un état pour cela. Il supprimerait le bouton contextuel multi-option et afficher un nouveau bouton unique option dans sa place:

<mx:states> 
    <mx:State name="singleOptionState"> 
    <mx:AddChild relativeTo="{multiOptionPopUpButton}" position="after"> 
     <mx:Button id="singleOptionButton" 
     width="80" 
     label="{buttonLabel}" 
     click="onClick(event)" /> 
    </mx:AddChild> 
    <mx:RemoveChild target="{multiOptionPopUpButton}" /> 
    </mx:State> 
</mx:states> 

Les noms et attributs seraient spécifiques à votre application, bien sûr.

Lorsque vous déterminez qu'il est temps de montrer le bouton unique option de le faire

currentState = "singleOptionState"; 

Quand il est temps de montrer le bouton contextuel multi-options, il suffit de faire:

currentState = ""; 

J'espère que cela t'aides.

Questions connexes