2010-02-03 82 views

回答

0

上下文菜单需要右键单击,然后才能捕获MouseEvent.CLICK事件(但尚未通过事件priority对其进行测试,因此请尝试)。

因此,您需要将一个flash.events.ContextMenuEvent处理程序添加到DataGrid(或像标题一样的数据网格的一部分)。或者你可以添加一个全球性的(这就是我所做的)。

然后检查鼠标下的当前目标。你可能不会得到你正在查找的确切项目(DisplayObject/UIComponent等),只是检查event.relatedObject属性等,所以你最好的选择是使用stage.getObjectsUnderPoint(new Point(stage.mouseX, stage.mouseY)。然后,一旦你得到对象(或者你发现“这个对象是我想要的对象”,你可以动态地设置上下文菜单)。

事情是这样的:

protected function updateTarget(event:ContextMenuEvent):void 
{ 
    var targets:Array = stage.getObjectsUnderPoint(new Point(stage.mouseX, stage.mouseY))// or less accurately, event.mouseTarget; 
    var target:DisplayObject = targets[targets.length - 1]; 
    if (target) 
    { 
     // array of ContextMenuItem objects based on the target 
     var contextMenuItems:Array = getMyContextMenuItems(target); 
     if (contextMenuItems) 
     { 
      var menu:flash.ui.ContextMenu = stage.contextMenu; // or another target 
      var menuItems:Array = []; 
      var i:int = 0, n:int = contextMenuItems.length; 
      for (i; i < n; i++) 
      { 
       menuItems.push(contextMenuItems[i].getItem()); 
      } 
      menu.customItems = menuItems; 
      if (hideBuiltInItems) 
       menu.hideBuiltInItems(); 
      target.contextMenu = menu; 
     } 
    } 
} 

自定义它,你需要它:)。

希望有所帮助。

相关问题