Flash 更改DropDownList[Flex,Spark Components]内的下拉列表大小
我使用FlexSDK 4.5.1和spark组件DropDownList 我想动态地改变下拉列表的宽度,而不是下拉列表的按钮,而是下拉列表本身,当按钮被点击时,下拉列表就会打开 到一个固定的尺寸,比如说-140 我通过编码实现了这一点: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()}"
<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;
}
}
}