У Flex є такий компонент PopUpButton. Поведінка його схожа на ComboBox, тільки ми маємо можливість задати будь-який компонент який відкриється при натисканні. Але маємо неприємність з тим, що при натисканні на щойно відкритий компонент він зразу зачиняється. Тобто ми не можемо використовувати, наприклад, List з встановленим allowMultipleSelection=true та вибрати декілька елементів в List. У компонента PopUpButton є потрібна нам властивість:
/**
* @private
* Storage for the closeOnActivity property.
*/
private var _closeOnActivity:Boolean = true;
/**
* @private
* Specifies popUp would close on click/enter activity.
* In popUps like Menu/List/TileList etc, one need not change
* this as they should close on activity. However for multiple
* selection, and other popUp, this can be set to false, to
* prevent the popUp from closing on activity.
*
* @default true
*/
private function get closeOnActivity():Boolean
{
// We are not exposing this property for now, until the need arises.
return _closeOnActivity;
}
/**
* @private
*/
private function set closeOnActivity(value:Boolean):void
{
_closeOnActivity = value;
}
Але як бачите вона є private :)
Рішення:
Потрібно зупинити всі MouseEvent.Click від нашого PopUp’у :
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:PopUpButton>
<mx:popUp>
<mx:List id="list" allowMultipleSelection="true">
<mx:dataProvider>
<mx:Array>
<mx:String>Один</mx:String>
<mx:String>Два</mx:String>
<mx:String>Три</mx:String>
<mx:String>Чотири</mx:String>
<mx:String>П'ять</mx:String>
</mx:Array>
</mx:dataProvider>
</mx:List>
</mx:popUp>
</mx:PopUpButton>
<mx:creationComplete>
<![CDATA[
list.addEventListener(MouseEvent.CLICK, listClickHandler, true);
]]>
</mx:creationComplete>
<mx:Script>
<![CDATA[
private function listClickHandler(event:MouseEvent):void
{
event.stopImmediatePropagation();
}
]]>
</mx:Script>
</mx:Application>