Контекстные меню требуют щелчка правой кнопкой мыши, и они фиксируют событие 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;
}
}
}
Настройте его так, как вам нужно:).
Надеюсь, это поможет.