Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Can';在UIComponent上看不到contextMenu,但在Flex的子视图上看不到contextMenu_Apache Flex_Actionscript 3 - Fatal编程技术网

Apache flex Can';在UIComponent上看不到contextMenu,但在Flex的子视图上看不到contextMenu

Apache flex Can';在UIComponent上看不到contextMenu,但在Flex的子视图上看不到contextMenu,apache-flex,actionscript-3,Apache Flex,Actionscript 3,我有一个UIComponent(也尝试了Canvas)和一些图标(子视图)。在UIComponent上,我定义了一些额外的ContextMenuItems。 现在,当我测试它时,右键单击上下文菜单只会出现在子视图(图标)上 我查看了文档,但没有找到使用上下文菜单所需的属性 您知道为什么它只在子视图上吗?这可能是因为您的UIComponent(或Canvas)图形是干净/空的。如果组件没有任何“内容”,它将作为透明的,这意味着不会捕获单击事件 如果您使用的是画布,有一种简单的方法可以检查这一点,请

我有一个UIComponent(也尝试了Canvas)和一些图标(子视图)。在UIComponent上,我定义了一些额外的ContextMenuItems。 现在,当我测试它时,右键单击上下文菜单只会出现在子视图(图标)上

我查看了文档,但没有找到使用上下文菜单所需的属性


您知道为什么它只在子视图上吗?

这可能是因为您的UIComponent(或Canvas)图形是干净/空的。如果组件没有任何“内容”,它将作为透明的,这意味着不会捕获单击事件

如果您使用的是画布,有一种简单的方法可以检查这一点,请尝试添加一些背景色,这样应该可以:

<mx:Canvas backgroundColor="#FFFFFF" backgroundAlpha="0.001"/>

我想这就是你想要的:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:mx="library://ns.adobe.com/flex/mx" 
               xmlns:s="library://ns.adobe.com/flex/spark"
               creationComplete="onCreationComplete()">
    <fx:Script>
        <![CDATA[
            private function onCreationComplete():void
            {
                var menu:ContextMenu = new ContextMenu();
                menu.customItems.push(new ContextMenuItem('weee'));
                menu.customItems.push(new ContextMenuItem('weee2'));
                menu.hideBuiltInItems();
                canvas.contextMenu = menu;
            }
        ]]>
    </fx:Script>
    <mx:Canvas id="canvas" backgroundColor="#000000" height="50%" width="50%" >
        <s:Button label="blarg" />
    </mx:Canvas>
</s:Application>


请注意我是如何创建一个菜单,然后添加项,然后替换contextMenu属性的。这应该适用于任何扩展InteractiveObject的对象。

问题在于其中一个父容器中的mouseeEnabled=“{false}”属性。我删除了它,现在它可以工作了。

我还有其他几个元素,比如标签、额外的画布(全矩形-用作背景)和图标。我也尝试了背景色,但没有任何变化。你能提供一些示例代码吗?您是否正在使用任何
视频
组件?画布有背景。这不是问题。@J_A_X尝试在画布上不使用“backgroundColor”属性的情况下运行代码,您会注意到您的自定义ContextMenuItems不会出现(它们只出现在画布的子项中,在本例中是按钮)。哦,现在我明白了,抱歉。但是,您不需要将backgroundAlpha指定为0.001。只有0会起作用。请让我了解您试图实现的目标。当用户单击图标、画布、标签或所有图标时,您是否试图让上下文菜单弹出特定条目?你可以发布一些代码来说明你是如何做到这一点的吗?当使用容器时,它需要有某种背景才能监听鼠标事件。如果你只想在画布上显示菜单,那么添加一个背景色,使backgroundAlpha等于0。我想我的问题出在另一个区域。你所有的例子都对我有用(如果我是从头开始创建的话)。但不是在目前的项目中,我必须解决这个问题。我试着移除效果,改变容器(从画布到容器再到UIContainer),改变图层,动作处理程序,事件。。。但到目前为止还没有成功。所以从技术上说你是完全正确的。我的问题是:什么可以从ui项中窃取上下文菜单?关于上下文菜单,需要记住一些重要的事情:“在Flex或Flash Builder中,只有应用程序中的顶级组件才能具有上下文菜单。例如,如果DataGrid控件是TabNavigator或VBox容器的子控件,则DataGrid控件不能有自己的上下文菜单。“您可能正试图将其添加到子组件中。我建议您考虑另一种方式来创建用户体验。就我个人而言,我从不使用鼠标右键单击,以防我们需要适应触摸屏:)我在文档中读到了这一点,以及它以前工作过的有趣的事情。(虽然它确实是一些顶级组件的子组件。)我有一个图形编辑应用程序,每个节点都有可以在上下文菜单中访问的功能。我仍然在追求它,但最后可能会从上下文菜单中移动函数。我尝试了一下,如果toplevel组件的子组件真的有效:对我来说,它甚至可以工作:VBox中数据网格上的上下文菜单。奇怪的