我使用flex SDK 4.5.1并使用spark组件DropDownList。
我想动态更改dropDown宽度(不是dropdownList的按钮,只是下拉本身,单击按钮时打开) 固定大小(比方说 - 140)。
我设法通过编码来实现这一目标:
<s:DropDownList
id="cSelector"
prompt=...
dataProvider=...
labelFunction="{ getOpLabel }"
open="{adjustWidth()}"
changing=...
/>
但是,单击dropDownList后,下拉列表不会立即调整大小 - 我可以看到调整大小过程半秒钟。 这可以修复或实现不同吗?怎么样?
一般情况下,我更喜欢下拉列表大小将由列表中最宽的项目调整,但这不会发生,并且修复它似乎太复杂了。
注意:编码应仅在mxml文件中进行。
提前致谢
我也尝试过以下操作:
<s:DropDownList
id="cSelector"
prompt=...
dataProvider=...
labelFunction="{ getOpLabel }"
creationComplete="{handleOpenEvent()}"
changing=...
/>
然后补充说:
protected function handleOpenEvent():void
{
cSelector.addEventListener(DropDownEvent.OPEN, changeWidth);
}
protected function changeWidth(evt:Event):void
{
cSelector.dropDown.width = 135;
}
但每次打开下拉列表时我仍会看到快速动画。第一次是最长的一次。
答案 0 :(得分:1)
要修改DropDownList中List的宽度,必须在open处理程序中添加它:
private function cSelector_openHandler(event:DropDownEvent):void
{
cSelector.dropDown.width = 300;
}
当我测试这段代码时,我注意到它第一次执行非常快速的动画,后来它只是以所需的宽度打开它。
答案 1 :(得分:0)
使用以下代码扩展DropdownList并使用这个新的CustomDropdownList,您的问题将得到解决。无需设置宽度,它将采用最宽的项目宽度。
package com {
import mx.collections.IList;
import spark.components.DropDownList;
import spark.components.PopUpAnchor;
public class CustomDropDownList extends DropDownList
{
[SkinPart(popUpWidthMatchesAnchorWidth)]
public var popUp:PopUpAnchor ;
public function CustomDropDownList():void
{
super();
}
override protected function partAdded(partName:String, instance:Object):void
{
super.partAdded(partName, instance);
if (partName == "popUp")
{
instance.popUpWidthMatchesAnchorWidth = false;
}
}
public override function set dataProvider(value:IList):void
{
super.dataProvider = value;
}
}
}