Como chegar Flex 3 ComboBox largura para ajustar com base no conteúdo dataProvider encadernados ter mudado?

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

Pergunta

No Flex 3, criei uma caixa de combinação dentro de um MXML componente semelhante ao seguinte:

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

Na aplicação MXML pai, eu estou modificando o conteúdo da propriedade opções:

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

A ligação é trabalhando em que a caixa de combinação é automaticamente pegar os novos conteúdos adicionados em tempo de execução, no entanto Não é ajustar sua largura. A largura inicial da caixa de combinação é grande o suficiente apenas para mostrar o item inicial "All" declarou no componente. No entanto, eu quero e teria esperado a caixa de combinação para re-size automaticamente durante a ligação a ser capaz de mostrar "California", mas não é.

Como posso obter a caixa de combinação para atualizar sua largura depois de eu ter adicionado novas ampla rótulos para seu dataProvider? Obrigado!

Foi útil?

Solução

Você provavelmente só precisa chamar invalidateProperties(), invalidateDisplayList(), invalidateSize(), ou alguma combinação dos três (eu sou algo de um novato Flex eu), para forçar uma atualização para medições do componente depois de alterar o provedor de dados ou seu conteúdo.

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

Outras dicas

Eu gostaria de acrescentar um setter para choices e chamada validateNow() na caixa de combinação no final do setter:

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

    comboBox.validateNow();
}

Eu encontrei o mesmo problema e nenhuma delas funcionou para mim. Eu consegui resolver isso criando um novo manipulador de eventos

menuComboBox.addEventListener(ResizeEvent.RESIZE, updateListWidth);

O método chamado neste evento simplesmente redimensiona a propriedade dropdown.width.

private function updateListWidth(event:ResizeEvent):void {
        menuComboBox.dropdown.width = menuComboBox.width;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top