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