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 应用程序中,我正在修改选择属性的内容:

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

您可能只需要调用invalidateProperties()invalidateDisplayList()invalidateSize()或这三者的某种组合(我自己就是一个灵活的新手),以在更改数据提供者或其内容后强制更新组件的测量值。

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

我会在 setter的末尾添加一个 setterchoices并调用ComboBox:validateNow()

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

    comboBox.validateNow();
}
于 2009-09-15T18:21:27.787 回答
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 回答