我对PopUpMenuButton Control有疑问。
此控件的现有行为是:
“PopUpMenuButton Control有两个按钮(主按钮和辅助按钮(看起来像”v“向下arraow符号))。当用户单击主按钮时,控件将调度itemClick(MenuEvent.ITEM_CLICK)事件,该事件包含有关所选菜单项的信息。因此,当用户单击主按钮或从弹出菜单中选择当前项时,将调度相同的itemClick事件。由于在两种情况下都会调度相同的事件,因此单击主按钮会产生与单击最后选择的menuItem相同的行为,因此主按钮将扮演常用菜单项的角色。“
在我的应用程序中,我要求更改主按钮的现有功能。它不应该导航到常用的菜单项屏幕,而应该打开弹出窗口,它应该与辅助按钮(v)完全相同。
我尝试使用PopUpMenuButton控件的openAlways = true属性。但它并没有完全解决问题。非常感谢任何帮助。
编辑 -
我已经尝试过以下TRISH提到的选项。但它并没有解决我的问题。
每当我们点击PopUpMenuButton控件的主按钮时,将调度两个事件。将调度第一次单击事件,然后调用itemClick事件。在Click事件处理程序中,我们正在编写代码以打开弹出窗口,因此它打开弹出窗口,在itemclick事件处理程序中,相应的页面导航代码就在那里,因此它将导航到该特定页面。 (这两个一个接一个地发生,所以第一个弹出窗口正在打开,并且在几秒钟内它因为itemclick处理程序代码导航到最近打开的页面。所以每当我们点击主按钮时这两个动作都是并行的,因此我们得到一个弹出窗口如果我们在itemclick处理程序中修改了任何东西,它会影响弹出按钮的功能,因为按钮点击的同一个处理程序。即使事件目标在itemclick事件的情况下也是相同的,无论主按钮或弹出按钮如何。 )
答案 0 :(得分:1)
编辑:在我看来,PopUpButton的行为可能比PopUpMenuButton更适合你。我写了一个应用程序来说明我理解你想要的行为:
单击主按钮不应触发上次选择的菜单项
的项目单击<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.controls.Menu;
import mx.events.MenuEvent;
[Bindable]
private var menu:Menu;
private function initMenu():void {
menu = new Menu();
var dp:Object = [
{label: "New Folder"},
{label: "Sent Items"},
{label: "Inbox"}
];
menu.dataProvider = dp;
menu.addEventListener("itemClick", changeHandler);
}
private function changeHandler(event:MenuEvent):void {
var label:String = event.label;
Alert.show(label);
// popUpButton.label = event.label;
popUpButton.close();
}
]]>
</fx:Script>
<s:VGroup>
<mx:PopUpButton id="popUpButton" openAlways="true"
label="Select a control..."
popUp="{menu}"
preinitialize="initMenu()" />
</s:VGroup>
</s:Application>