DropDownList中更改DropDown大小[Flex,Spark Components]

时间:2017-01-27 14:15:14

标签: flash flex drop-down-menu dropdown

我使用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;
}

但每次打开下拉列表时我仍会看到快速动画。第一次是最长的一次。

2 个答案:

答案 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;
    }
}
}