2017-02-28 19 views
0

我们都知道如何在MXML中使用XML定义本机菜单。它看起来像这样:Flex:如何在扩展WindowedApplication类的AS3类中创建本地菜单

<s:WindowedApplication 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:Declarations> 
    <!-- The xml data provider for menu --> 
    <fx:XML format="e4x" id="menuData"> 
     <root> 
      <menuitem label="File"> 
       <menuitem label="Open"/> 
       <menuitem label="Save"/> 
      </menuitem> 
      <menuitem label="Help"/> 
     </root> 
    </fx:XML> 
</fx:Declarations> 
<s:menu> 
    <mx:FlexNativeMenu dataProvider="{menuData}" labelField="@label" showRoot="false"/> 
</s:menu> 

但我需要在一个延伸WindowedApplication的类,并且是由主MXML扩展类使用加载XML,使本机菜单(应用程序菜单)。我怎样才能做到这一点?感谢您提前提供任何帮助!

回答

0

下面是菜单的actionscript类的示例。

package com { 
import mx.controls.FlexNativeMenu; 
import mx.controls.Menu; 

import spark.components.WindowedApplication; 

public class MyNativeMenu extends WindowedApplication{ 

    public var menuData:XML; 
    public var flexNativeMenu:FlexNativeMenu; 
    public var myMenu:Menu; 
    public function MyNativeMenu() { 
     menuData = <root> 
      <menuitem label="File"> 
       <menuitem label="Open"/> 
       <menuitem label="Save"/> 
      </menuitem> 
      <menuitem label="Help"/> 
     </root>; 
     flexNativeMenu = new FlexNativeMenu(); 
     flexNativeMenu.dataProvider = menuData; 
     flexNativeMenu.labelField = "@label"; 
     flexNativeMenu.showRoot = false; 
    } 

    override protected function createChildren():void { 
     this.menu = flexNativeMenu; 
    } 
} 
} 

和主MXML是像下面

<?xml version="1.0"?> 
<com:MyNativeMenu xmlns:fx="http://ns.adobe.com/mxml/2009"  xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:com="com.*"> 
<fx:Script><![CDATA[ 
    ]]></fx:Script> 
</com:MyNativeMenu> 
+0

嗨萨米特,非常感谢!这工作!但是我怎么知道,我应该覆盖哪个函数呢?我想你也可以回答我的这个问题。[链接](http://stackoverflow.com/questions/42549177/flex4-how-to-create-the-view-states-in-as-class-code-behind ) –

+0

取决于您想要覆盖的功能。那么如果你想添加更多的组件到你的组件类中,你可以重写createChildren方法。在你的情况下,你实际上可以将createChildren方法中的行移动到构造方法本身,因为我们只是将flexnativemenu分配给菜单。 – Sumit

+0

感谢您的解释:) –