如何根据已更改的绑定 dataProvider 内容调整 Flex 3 ComboBox 宽度?
Posted
技术标签:
【中文标题】如何根据已更改的绑定 dataProvider 内容调整 Flex 3 ComboBox 宽度?【英文标题】:How to get Flex 3 ComboBox width to adjust based on bound dataProvider contents having changed? 【发布时间】:2010-11-28 13:17:33 【问题描述】:在 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 更新其宽度?谢谢!
【问题讨论】:
如何将宽度设置为 100% ... 如 comboBox.percentWidth = 100; ifeedme.com/blog/?p=19 - 有很好的解决方案 谢谢。这是一个很好的解决方案,但解决了一个不同的问题:试图让下拉列表的大小与折叠控件的大小不同。在更改内容后,我希望整个控件(无论是否折叠)成为最宽项的大小。 @CapnNefarious 对 invalidateSize() 的回答成功了。 大家:很抱歉没有早点回来。我刚刚浏览了解决方案并标记了对我有用的解决方案。 【参考方案1】:您可能只需要调用invalidateProperties()
、invalidateDisplayList()
、invalidateSize()
或这三者的某种组合(我自己也是一个 flex 新手),以在更改后强制更新组件的测量值数据提供者或其内容。
myComponentId.invalidateSize();
myComponentId.invalidateDisplayList();
myComponentId.invalidateProperties();
【讨论】:
+1。修改选项后调用 invalidateSize() 确实会更新宽度。其他两个没有。 不管怎样,这在使用 mx:ComboBox 控件的 Flex 4 中似乎不起作用。【参考方案2】:我会为choices
添加一个setter,并在setter 末尾的ComboBox 上调用validateNow()
:
public function set choices(value:ArrayCollection):void
_choices = value;
comboBox.validateNow();
【讨论】:
在修改选项后在组合框上调用 validateNow() 并没有 更新宽度。【参考方案3】:我遇到了同样的问题,但这些都不适合我。我设法通过创建一个新的事件处理程序来解决这个问题
menuComboBox.addEventListener(ResizeEvent.RESIZE, updateListWidth);
在此事件中调用的方法只是调整 dropdown.width 属性的大小。
private function updateListWidth(event:ResizeEvent):void
menuComboBox.dropdown.width = menuComboBox.width;
【讨论】:
我试过你的代码,但没有解决问题。实际上,假设我正确阅读了这段代码,这并不是我遇到的问题。组合框在修改其内容后,即使在折叠 时也没有正确的大小。问题不只是下拉组件。以上是关于如何根据已更改的绑定 dataProvider 内容调整 Flex 3 ComboBox 宽度?的主要内容,如果未能解决你的问题,请参考以下文章