在flex中自定义PopUpMenuButton控件

时间:2012-09-13 11:56:49

标签: java flash flex

我对PopUpMenuButton Control有疑问。

此控件的现有行为是:

“PopUpMenuButton Control有两个按钮(主按钮和辅助按钮(看起来像”v“向下arraow符号))。当用户单击主按钮时,控件将调度itemClick(MenuEvent.ITEM_CLICK)事件,该事件包含有关所选菜单项的信息。因此,当用户单击主按钮或从弹出菜单中选择当前项时,将调度相同的itemClick事件。由于在两种情况下都会调度相同的事件,因此单击主按钮会产生与单击最后选择的menuItem相同的行为,因此主按钮将扮演常用菜单项的角色。“

在我的应用程序中,我要求更改主按钮的现有功能。它不应该导航到常用的菜单项屏幕,而应该打开弹出窗口,它应该与辅助按钮(v)完全相同。

我尝试使用PopUpMenuButton控件的openAlways = true属性。但它并没有完全解决问题。非常感谢任何帮助。

编辑 -

我已经尝试过以下TRISH提到的选项。但它并没有解决我的问题。

每当我们点击PopUpMenuButton控件的主按钮时,将调度两个事件。将调度第一次单击事件,然后调用itemClick事件。在Click事件处理程序中,我们正在编写代码以打开弹出窗口,因此它打开弹出窗口,在itemclick事件处理程序中,相应的页面导航代码就在那里,因此它将导航到该特定页面。 (这两个一个接一个地发生,所以第一个弹出窗口正在打开,并且在几秒钟内它因为itemclick处理程序代码导航到最近打开的页面。所以每当我们点击主按钮时这两个动作都是并行的,因此我们得到一个弹出窗口如果我们在itemclick处理程序中修改了任何东西,它会影响弹出按钮的功能,因为按钮点击的同一个处理程序。即使事件目标在itemclick事件的情况下也是相同的,无论主按钮或弹出按钮如何。 )

1 个答案:

答案 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>