2017-02-28 111 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

感謝您的解釋:) –