apache-flex 更改DropDownList中的下拉列表大小[Flex,Spark Components]

vc6uscn9  于 2022-11-01  发布在  Apache
关注(0)|答案(2)|浏览(182)

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

但是我还是每次打开下拉菜单都会看到快速的动画,第一次是最长的一次。

ajsxfq5m

ajsxfq5m1#

若要修改DropDownList中List的宽度,必须在打开处理程序中添加以下内容:

private function cSelector_openHandler(event:DropDownEvent):void
{
    cSelector.dropDown.width = 300;

}

当我在测试这段代码时,我注意到第一次它做一个非常快的动画,随后的时间它只是以所需的宽度打开它。

3xiyfsfu

3xiyfsfu2#

使用以下代码扩展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;
    }
}
}

相关问题