Flex:组件的自定义上下文菜单

时间:2011-03-21 18:46:45

标签: flex flex4

我有一个Flex应用程序,运行Flash Player,而不是AIR,包含Tree,我想在其上放置自定义上下文菜单。

试图做<mx:Tree ... contextMenu="{MyClassWithStatic.menu}">,但这没有做任何事情。

进行搜索,并在某处找到了某些Adobe文档的引用

  

在Flex或Flash Builder中,只有应用程序中的顶级组件可以具有上下文菜单。例如,如果DataGrid控件是TabNavigator或VBox容器的子项,则DataGrid控件不能拥有自己的上下文菜单。

所以向上,尝试每个父元素,直到我到达我的<Application> - 元素,这与他们写的内容一致。

尝试根据包含我的树的Group(默认值)和顶级元素的上下文菜单制作Flex组件,希望它可以工作,但无济于事。

还有其他方法来管理我尚未找到的吗?

我用来创建菜单的代码:

var menuItems:Array = [];
var rename:ContextMenuItem = new ContextMenuItem("Rename");
rename.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, renameSelectedHandler);  
menuItems.push(rename);  
menu.customItems = menuItems;
menu.hideBuiltInItems();

3 个答案:

答案 0 :(得分:2)

你是对的,contextmenu只适用于顶级组件。这是Flex的一个限制,它很烦人,不应该首先出现在那里。除了使用一些Javascript技巧之外,除了使用某些Javascript技巧之外无法捕获事件,因此没有太多可以做的事情,但即便如此,它也没有告诉您在哪里点击。

如果我是你,我会忘记这个概念,如果可能的话,完全不再使用右键点击。

答案 1 :(得分:0)

我无法确定,因为所有代码都没有。但你似乎忽略了自己的研究。不要使用新组件或“包含”树的任何内容。然后将树粘贴在您的应用程序中。

此外,我对TreeItemRenderer的记忆与其他UI组件的记忆不同。也许,先用Datagrid测试你的“菜单”代码并确保它有效。祝你好运

答案 2 :(得分:0)

我自己没有尝试过,但在阅读http://michael.omnicypher.com/2007/02/flex-trees-with-context-menu_14.html上的评论之后,看起来您可以在树的项目渲染器中添加上下文菜单。

http://blog.arc90.com/2008/04/21/adding-a-contextmenu-to-a-flex-tree/上的文章和评论也值得一看。