ContextMenuManager

In Flex, only top-level components in the application can have context menus. For example, if a DataGrid control is a child of a TabNavigator or VBox container, the DataGrid control cannot have its own context menu.

这是引自Flex文档里的一段话,而且Flash里也是这样,嵌套的MovieClip没法设置menu。我觉得这实在是没道理,在实际应用中,我们很容易碰到需要给嵌套MovieClip设置menu的需求。比如在一个Tree组件中,我们有时会需要根据上下文为每一个TreeNode指定不同的ContextMenu。

不过这种需求在现在MM给的环境中无法直接实现。

于是我开始动手自己写了个ContextMenuManager,目的很明确,就是可以给任意一个MovieClip或者TextField添加相关的ContextMenu。

完整的源码和示例文件可以 从这里下载

ContextMenuManager常规的用法包含以下几步:

  • 从ContextMenuManager中获取一个新的ContextMenu;
1
var cm:ContextMenu = ContextMenuManager.newMenuTemplate();
  • 向ContextMenu中添加ContextMenuItem;
1
ContextMenuManager.appendCustomMenuItem(cm,"pawa!");
  • 把ContextMenu添加到指定的movieclip或者textfield上。
1
ContextMenuManager.setMenu(yourMovieclipOrTextField,cm);

就这样!Enjoy!

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>