我们如何在datagrid列标题中添加上下文菜单。 感谢
答案 0 :(得分:0)
上下文菜单需要右键单击,然后才能捕获MouseEvent.CLICK
事件(但未使用事件priority
进行测试,请尝试)。
因此,您需要向DataGrid(或数据网格的一部分,如标题)添加flash.events.ContextMenuEvent
处理程序。或者你可以添加一个全局的(这就是我所做的)。
然后检查鼠标下的当前目标。你可能不会得到你想要检查event.relatedObject属性的确切项目(DisplayObject / UIComponent等),所以你最好的选择是使用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;
}
}
}
根据需要自定义:)。
希望有所帮助。