Question

Dans Flex 3, j'ai créé un composant ComboBox dans un composant MXML semblable au suivant:

<mx:ComboBox id="comboBox" dataProvider="{_choices}" />

<mx:Script>
<![CDATA[
  import mx.collections.ArrayCollection;
  // etc...
  public function get choices():ArrayCollection { return _choices; }

  [Bindable]
  private var _choices:ArrayCollection =
    new ArrayCollection( [ { data: "ALL", label: "All" } ] );
  // etc...
]]>
</mx:Script>

</mx:HBox>

Dans l'application MXML parente, je modifie le contenu de la propriété choices:

myComponentId.choices.removeAll();
myComponentId.choices.addItem({data: "NY", label: "New York"});
myComponentId.choices.addItem({data: "CA", label: "California"});
// etc...

La liaison fonctionne en ce sens que la zone de liste déroulante capte automatiquement les nouveaux contenus ajoutés au moment de l'exécution, cependant , elle ne modifie pas sa largeur. La largeur initiale de la ComboBox est suffisamment large pour afficher uniquement l'élément initial "Tous". déclaré dans le composant. Cependant, je souhaite et je m'attendais à ce que la ComboBox se redimensionne automatiquement pendant la liaison pour pouvoir afficher "Californie", mais ce n'est pas le cas.

Comment puis-je obliger la ComboBox à mettre à jour sa largeur après avoir ajouté de nouvelles étiquettes plus larges à son fournisseur de données? Merci!

Était-ce utile?

La solution

Il vous suffit probablement d'appeler invalidateProperties () , invalidateDisplayList () , invalidateSize () ou une combinaison des trois (I suis un peu novice moi-même), pour forcer une mise à jour des mesures du composant après avoir changé le fournisseur de données ou son contenu.

myComponentId.invalidateSize();
myComponentId.invalidateDisplayList();
myComponentId.invalidateProperties();

Autres conseils

Je voudrais ajouter un paramètre pour choice et appeler validateNow () sur la zone de liste déroulante à la fin du programme de configuration:

public function set choices(value:ArrayCollection):void
{
    _choices = value;

    comboBox.validateNow();
}

J'ai rencontré le même problème et aucun de ceux-ci n'a fonctionné pour moi. J'ai réussi à résoudre ce problème en créant un nouveau gestionnaire d'événements

menuComboBox.addEventListener(ResizeEvent.RESIZE, updateListWidth);

La méthode appelée dans cet événement redimensionne simplement la propriété dropdown.width.

private function updateListWidth(event:ResizeEvent):void {
        menuComboBox.dropdown.width = menuComboBox.width;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top