2013-03-20 13 views
0

我使用mx:MenuBar組件帶有xml數據來帶來一個菜單。我看到的基本行爲是,首先在點擊頂層菜單項(即在水平條上),彈出子菜單打開。然後,無需點擊任何位置,如果將鼠標懸停在水平菜單欄上,則會打開其他頂級菜單的彈出子菜單。如何防止在mouseOver/rollOver事件期間打開mx:MenuBar(Flex)的彈出子菜單?

這種行爲似乎不一致。彈出的子菜單應該在任何頂級菜單項(水平菜單欄)上點擊或者僅在菜單欄項目的鼠標懸停/滾動上打開。

我想要彈出的子菜單隻在點擊頂級菜單(水平菜單欄)時打開。所以我爲mouseOver和rollOver事件添加了事件處理程序(不知道懸停在水平菜單欄上的實際生成的事件)。在事件處理程序中,我調用event.preventDefault()方法來防止默認行爲(即打開彈出式子菜單)。但是,沒有任何工作。我覺得,我無法控制它。

任何人都可以說如何抑制默認行爲並僅在菜單欄的單擊事件中打開彈出子菜單。

+0

你爲什麼認爲這種行爲比較激動?這是Windows程序的相同行爲。 – HugoLemos 2013-03-20 19:42:23

+0

感謝您的回覆。好。菜單欄可能會有我們所看到的默認行爲。但是,如果我想讓我的菜單欄打開彈出式子菜單,只需點擊菜單欄中的任何項目,我該如何實現它? – santox 2013-03-21 04:26:05

+0

也許你應該創建一個新的動作類擴展MenuBar並重寫處理程序。看到一個例子:http://livedocs.adobe.com/flex/3/html/help.html?content=ascomponents_5.html – HugoLemos 2013-03-21 15:29:15

回答

0

你可以使用「monkey patching」來重新定義MenuBar類的行爲。通過重寫方法來做它並不容易,因爲它們是私人的。

這是一個工作example與活躍的「查看源」屬性。

功能被改寫爲

private function mouseOverHandler(event:MouseEvent):void 
{ 
} 

每個人都應該刪除該代碼行,這激活了新的菜單。

+0

聰明的工作夥計!完善!這正是我想要的。非常感謝。 – santox 2013-04-17 13:34:36

相關問題