private void control_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right && ((Control.ModifierKeys & Keys.Alt) == 0)) { Point p = new Point(e.X, e.Y); object target = null; foreach (IPickingAdapter pickingAdapter in AdaptedControl.AsAll <IPickingAdapter>()) { DiagramHitRecord hitRecord = pickingAdapter.Pick(p); if (hitRecord.Item != null) { target = hitRecord.Item; break; } } // iter over IPickingAdapter if (target == null) { foreach (IPickingAdapter2 pickingAdapter in AdaptedControl.AsAll <IPickingAdapter2>()) { DiagramHitRecord hitRecord = pickingAdapter.Pick(p); if (hitRecord.Item != null) { target = hitRecord.Item; break; } } } object context = AdaptedControl.Context; TriggeringLocation = p; var commands = new List <object>(m_providers.GetCommands(context, target)); OnContextMenuOpening(commands); Point screenP = AdaptedControl.PointToScreen(p); m_commandService.RunContextMenu(commands, screenP); } }