我使用AS3创建了一个自定义contextMenu,可以将其应用到舞台上。我放在舞台上的任何影片剪辑都不会从舞台继承contextMenu,即它们会显示默认的contextMenu。
如何将自定义contextMenu应用于我的应用程序中的每个子项?
[编辑]
这是我在main.as文件中的简化版本:
var my_menu:ContextMenu = new ContextMenu();
my_menu.hideBuiltInItems();
var my_copyright = new ContextMenuItem("Copyright - 2012");
my_copyright.enabled = false;
my_copyright.separatorBefore = true;
my_menu.customItems.push(my_copyright);
stage.contextMenu = my_menu;
如果我右键点击舞台,那么我就会获得版权。如果我向舞台添加一个movieclip(或其他任何东西),然后右键单击它,然后我得到默认的上下文菜单。
[编辑]
我找到了问题并修复了它。我正在使用stage.addChildAt(mc,0);添加背景图像。由于某种原因,这将删除上下文菜单。将子项置于1会修复此问题并允许所有内容继承contextMenu。
之前:http://richard.parnaby-king.co.uk/examples/stackoverflow/stackoverflow.swf
之后:http://richard.parnaby-king.co.uk/examples/stackoverflow/stackoverflow-after.swf
我正在改变赏金的目的 - 有人可以解释为什么会发生这种情况!?
答案 0 :(得分:1)
你的原因在于你为舞台添加了什么?他们的订单。
我可以引用与adobe live docs相关的2分:
索引0表示显示列表的后面(底部) 这个DisplayObjectContainer对象。
如果指定当前占用的索引位置,则为子对象 存在于该位置,所有较高位置向上移动一个 在儿童名单中的位置。
我认为如果你正确地分析了添加到舞台上的所有东西,你自己可能会得到答案。
答案 1 :(得分:1)
好的,经过一些测试后,这就是我所拥有的。我不能说这是明确的,因为闪存没有给出右键点击的事件,所以这只是一个猜测,但它似乎坚持。
在旁注中,您无法向舞台添加上下文菜单,它不会允许它,因此您可以将其添加到的最低项是文档类
右键单击DisplayObject时,它将在该对象上查找ContextMenu。它没有找到它,它将继续在该对象的层次结构中寻找一个,在找到它时停止。像这样:
stage
- document (has context menu1)
- parent (has context menu2)
- child
- parent2
在此示例中,如果右键单击child
,则没有菜单,因此它会显示parent
。在这里它找到context menu2
所以它显示了这一点。但是,如果您右键单击parent2
,则没有菜单,因此它会显示document
,并在此处找到context menu1
。
当你右键点击舞台上的其他地方(即没有图形的地方)时,似乎有点黑客攻击。在这种情况下,由于舞台不能有ContextMenu
(或者至少你不能设置一个),它似乎决定使用深度为0的子项的上下文菜单(通常是文档类)
当您在深度0处添加背景图像时,您将文档类提升到深度1.您的层次结构现在看起来像这样:
stage
- bg
- document (has context menu1)
- parent (has context menu2)
- child
- parent2
我假设您要将上下文菜单添加到文档类(在此示例中为context menu1
),因此除非您的文档类中包含某些图形,否则您的事件将搜索到该阶段,找到没有上下文菜单,然后尝试查找子0的上下文菜单 - 在这种情况下bg
没有。
您可以通过在文档类的graphics
对象中绘制内容(或单击其中一个嵌套元素)来测试它。如果您右键单击图形,即使bg
位于深度0,您也会看到自定义菜单。或者,您可以向bg
添加另一个菜单以查看我的意思。
答案 2 :(得分:0)
尝试将stage.contextMenu = my_menu;
更改为contextMenu = my_menu;