1

Flex 3 では、次のような MXML コンポーネント内に ComboBox を作成しました。

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

親 MXML アプリケーションで、choices プロパティの内容を変更しています。

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

バインディング、ComboBox が実行時に追加された新しいコンテンツを自動的に取得するという点で機能していますが、その幅は調整されていませんComboBox の最初の幅は、コンポーネントで宣言された最初の項目 "All" のみを表示するのに十分な幅です。ただし、「カリフォルニア」を表示できるように、バインド中に ComboBox のサイズが自動的に変更されることを期待していましたが、そうではありません。

dataProvider に幅の広い新しいラベルを追加した後、ComboBox の幅を更新するにはどうすればよいですか? ありがとうございました!

4

3 に答える 3

2

データプロバイダーまたはそのコンテンツを変更した後、コンポーネントの測定値を強制的に更新するには、、、、、または3つの組み合わせ(私自身はフレックス初心者のようなものです)をinvalidateProperties()呼び出す必要があります。invalidateDisplayList()invalidateSize()

myComponentId.invalidateSize();
myComponentId.invalidateDisplayList();
myComponentId.invalidateProperties();
于 2009-09-15T17:52:29.077 に答える
0

私は同じ問題に遭遇しましたが、どちらもうまくいきませんでした。新しいイベントハンドラーを作成することでこれを解決できました

menuComboBox.addEventListener(ResizeEvent.RESIZE, updateListWidth);

このイベントで呼び出されるメソッドは、単純に dropdown.width プロパティのサイズを変更します。

private function updateListWidth(event:ResizeEvent):void {
        menuComboBox.dropdown.width = menuComboBox.width;
}
于 2010-06-01T13:59:29.623 に答える