在Datagrid中添加上下文菜单

时间:2010-02-03 11:34:07

标签: flex

我们如何在datagrid列标题中添加上下文菜单。 感谢

1 个答案:

答案 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;
        }
    }
}

根据需要自定义:)。

希望有所帮助。