private void PopupMenuAtLocation(NSObject sender) { var button = (NSButton)sender; CGPoint location = new CGPoint(); location.X = button.Frame.GetMinX(); location.Y = button.Frame.GetMidY(); location = button.Superview.ConvertPointToView(location, null); NSWindow window = Utility.GetMainWindowConroller().Window; nint windowNumber = window.WindowNumber; if (TagMenu == null) { TagMenu = new NSMenu(); } else { TagMenu.RemoveAllItems(); } NSMenuItem menuItem = new NSMenuItem("All Tags"); menuItem.Image = Utility.ImageWithFilePath("/Images/Annotation/[email protected]"); menuItem.Action = new ObjCRuntime.Selector("TagFilterMenuItemClick:"); menuItem.Target = this; menuItem.Tag = 0; TagMenu.InsertItem(menuItem, 0); menuItem = new NSMenuItem("No Tag"); menuItem.Image = CreateImageWithColor(string.Empty); menuItem.Action = new ObjCRuntime.Selector("TagFilterMenuItemClick:"); menuItem.Target = this; menuItem.Tag = 1; TagMenu.InsertItem(menuItem, 1); TagMenu.AddItem(NSMenuItem.SeparatorItem); for (int i = 3; i < this.TagList.Count; i++) { menuItem = new NSMenuItem(this.TagList[i].Title); menuItem.Image = CreateImageWithColor(this.TagList[i].Color); menuItem.Action = new ObjCRuntime.Selector("TagFilterMenuItemClick:"); menuItem.Target = this; menuItem.Tag = i; menuItem.State = NSCellStateValue.Off; TagMenu.InsertItem(menuItem, i); } var menuItems = TagMenu.ItemArray(); for (int i = 0; i < this.TagList.Count; i++) { menuItems[i].State = this.TagList[i].CheckState; } NSEvent fakeMouseEvent = NSEvent.MouseEvent(NSEventType.LeftMouseUp, location, (NSEventModifierMask)NSEventMask.LeftMouseUp, 0, windowNumber, window.GraphicsContext, 0, 1, 1); NSMenu.PopUpContextMenu(TagMenu, fakeMouseEvent, (NSView)sender); }