我正在处理Flex4中的自定义上下文菜单。上下文菜单本身运行良好,但我正在寻找一种方法来判断ContextMenuEvent mouseTarget是否是图像。按照原样,mouseTarget显示它是一个"object MovieClip“。这很奇怪,因为我的应用程序中没有电影剪辑,只有图像容器。知道这是怎么回事吗?
private function openContextMenu(e:ContextMenuEvent):void {
Alert.show(e.mouseTarget.toString());// shows [object MovieClip] when it should show [Object Image]
}谢谢
发布于 2012-04-26 08:31:04
您需要将镜像上的mouseChildren设置为false,然后MouseEvent将引用该镜像:
if (event.target is Image) {
//do stuff
}发布于 2012-04-26 05:46:18
因此,经过几个多小时的研究,我想出了以下附加到contextMenu的item select event listener的内容。我相信一定有更好的方法,但在那之前...
for(var i:int = 0; i < getObjectsUnderPoint(new Point(this.mouseX, this.mouseY)).length; i++)
{
if(getObjectsUnderPoint(new Point(this.mouseX, this.mouseY))[i].parent.parent is Image)
{
//do what I need to do
}
}感谢NHubben提供的意见。它让我走上了看孩子的正确道路。
发布于 2012-04-26 07:49:37
组件名称Image与组成它的内容无关。flex继承是: Image -- SWFLoader -- UIComponent -- FlexSprite -- ...。
因此,您需要做的是在将其引入AS3环境时了解您实际拥有的内容。它似乎被包装在一个MovieClip中,以允许它出现在Flash的显示列表中。看起来你也必须通过加载程序,但我不确定这一点。
运行一个测试或两个测试,找出对象的实际组成:
// not foolproof, and will break on some stuff,
// so you will have to fix this as needed:
private function loopDisplay(obj:Sprite):void
{
trace(obj.name + ": " + obj);
if (obj.numChildren > 0)
{
for (var i:int = 0; i < this.numChildren; i++)
{
loopDisplay(obj.getChildAt(i));
}
}
}如果您将其放入鼠标按下处理程序中,则可以看到实际存在的内容。
但是,event.target或event.currentTarget还应该包含菜单项对象,因此您还可以循环访问这些对象并查看其中的内容。
https://stackoverflow.com/questions/10316638
复制相似问题