2010-03-11 37 views
3

我不知道爲什麼,但我發現菜單欄上的itemclick事件不會解僱,除非您單擊一個子項目。Flex:Menubar,menu click

什麼是乾淨的方式來處理點擊頂級菜單項,並沒有子菜單項。

例如,我想在點擊MenuItem B時觸發一個事件。

<?xml version="1.0"?> 
<!-- menus/MenuBarControl.mxml --> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > 

    <mx:MenuBar id="myMenuBar" labelField="@label" itemClick="{itemClick(event)}" > 
     <mx:XMLList> 
      <menuitem label="MenuItem A"> 
       <menuitem label="SubMenuItem A-1"/> 
       <menuitem label="SubMenuItem A-2"/> 
      </menuitem> 
      <menuitem label="MenuItem B"/> 
     </mx:XMLList> 
    </mx:MenuBar> 
</mx:Application> 

回答

1

此行爲是設計使然。想象一下,如果它作爲瀏覽器中的菜單欄:單擊文件,編輯,查看等頂級項目只顯示彈出窗口,它們不會觸發任何操作。

livedocs page for MenuBar

MenuBar一個控制定義了包含一個或菜單項的水平,頂層菜單欄。點擊頂級菜單項打開一個彈出子菜單,該子菜單是Menu控件的一個實例。

MenuBar控件的頂級菜單欄通常始終可見。它不打算用作彈出式菜單。當用戶用鼠標或鍵盤選擇它們時,單個子菜單彈出。

如果你必須做的頂級作品點擊的東西,聽click事件的MenuBar,並通過parentevent.target的遍歷尋找一個MenuBarItem,默認項呈示MenuBar的頂級項目

0

其中柔性給出開箱的菜單欄有很大的侷限性。對於比如我不能有一個嵌套的子菜單像 top_menu -level 1菜單 - 第2層菜單 -level 3菜單..... 來湊如果需要在每個子菜單中添加一個額外的菜單,確實很痛苦。

3

想這可以幫助,

protected function myMenuBar_clickHandler(event:MouseEvent):void 
     { 
      // TODO Auto-generated method stub 
      [email protected]; 
     } 

protected function myMenuBar_itemClickHandler(event:MenuEvent):void 
     { 
      // TODO Auto-generated method stub 
      [email protected]; 
     } 

FOF以下菜單欄,

<mx:MenuBar id="myMenuBar" labelField="@label" click="myMenuBar_clickHandler(event)" itemClick="myMenuBar_itemClickHandler(event)" > 
    <mx:XMLList> 
     <menuitem label="MenuItem A" index="0"> 
      <menuitem label="SubMenuItem A-1" index="0-0"/> 
      <menuitem label="SubMenuItem A-2" index="0-1"/> 
     </menuitem> 
     <menuitem label="MenuItem B" index="1"/> 
    </mx:XMLList> 
</mx:MenuBar> 

在這裏,我以前也增加了一個屬性 '索引'。作爲一個XML,我們可以添加任何元素,除了一些關鍵字。

「ItemClick」事件將採取兒童的,並且「Click」將照顧頂層菜單欄項目(父母)。

希望這會有所幫助。

Regards, Prakash