Come far regolare la larghezza di Flex 3 ComboBox in base ai dati associati Il contenuto del provider è stato modificato?

StackOverflow https://stackoverflow.com/questions/1428597

Domanda

In Flex 3, ho creato un ComboBox all'interno di un componente MXML simile al seguente:

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

Nell'applicazione MXML padre, sto modificando il contenuto della proprietà scelta:

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

Il binding funziona in quanto ComboBox sta raccogliendo automaticamente i nuovi contenuti aggiunti in fase di esecuzione, tuttavia non sta regolando la sua larghezza. La larghezza iniziale di ComboBox è abbastanza ampia da mostrare solo l'elemento iniziale "Tutto". dichiarato nel componente. Tuttavia, desidero e mi sarei aspettato che il ComboBox si ridimensionasse automaticamente durante l'associazione per poter mostrare "California", ma non lo è.

Come posso fare in modo che ComboBox aggiorni la sua larghezza dopo aver aggiunto nuove etichette più larghe al suo dataProvider? Grazie!

È stato utile?

Soluzione

Probabilmente devi solo chiamare invalidateProperties () , invalidateDisplayList () , invalidateSize () o una combinazione delle tre (I sono una specie di principiante flessibile), per forzare un aggiornamento delle misure del componente dopo aver modificato il fornitore di dati o il suo contenuto.

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

Altri suggerimenti

Aggiungerei un setter per scelte e chiamerei validateNow () su ComboBox alla fine del setter:

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

    comboBox.validateNow();
}

Ho riscontrato lo stesso problema e nessuno di questi ha funzionato per me. Sono riuscito a risolverlo creando un nuovo gestore eventi

menuComboBox.addEventListener(ResizeEvent.RESIZE, updateListWidth);

Il metodo chiamato in questo evento ridimensiona semplicemente la proprietà dropdown.width.

private function updateListWidth(event:ResizeEvent):void {
        menuComboBox.dropdown.width = menuComboBox.width;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top