Flash 更改DropDownList[Flex,Spark Components]内的下拉列表大小

Flash 更改DropDownList[Flex,Spark Components]内的下拉列表大小,flash,apache-flex,drop-down-menu,dropdown,Flash,Apache Flex,Drop Down Menu,Dropdown,我使用FlexSDK 4.5.1和spark组件DropDownList 我想动态地改变下拉列表的宽度,而不是下拉列表的按钮,而是下拉列表本身,当按钮被点击时,下拉列表就会打开 到一个固定的尺寸,比如说-140 我通过编码实现了这一点: <s:DropDownList id="cSelector" prompt=... dataProvider=... labelFunction="{ getOpLabel }" open="{adjustWidth()}"

我使用FlexSDK 4.5.1和spark组件DropDownList

我想动态地改变下拉列表的宽度,而不是下拉列表的按钮,而是下拉列表本身,当按钮被点击时,下拉列表就会打开 到一个固定的尺寸,比如说-140

我通过编码实现了这一点:

<s:DropDownList 
   id="cSelector"
   prompt=...
   dataProvider=...
   labelFunction="{ getOpLabel }"
   open="{adjustWidth()}"
   changing=...
   />

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

要修改DropDownList中列表的宽度,必须将其添加到打开的处理程序中:

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

}

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

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

我试过这个选择。我编写了一个调用cSelector.addEventListenerDropDownEvent.OPEN、cSelectorHandler\u openHandler的函数。此函数由creationComplete调用。我尝试的cSelector_openHandler的实现与您的完全相同。但我仍然看到了动画,不仅仅是在第一次。也许这个解决方案可以工作,但我想解决它而不扩展DropDownList,只在mxml文件中编写代码。您的建议要求在AS文件中编写一个新类。
private function cSelector_openHandler(event:DropDownEvent):void
{
    cSelector.dropDown.width = 300;

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