Skip to content
github-actions[bot] edited this page Oct 31, 2025 · 1 revision

Create application menus, context menus, and menu items with full keyboard shortcut support.

Overview

The Electron.Menu API provides comprehensive control over application menus and context menus. It supports native platform menus with custom menu items, submenus, keyboard shortcuts, and role-based menu items.

Properties

📋 IReadOnlyDictionary<int, ReadOnlyCollection<MenuItem>> ContextMenuItems

Gets a read-only dictionary of all current context menu items, keyed by browser window ID.

📋 IReadOnlyCollection<MenuItem> MenuItems

Gets a read-only collection of all current application menu items.

Methods

🧊 void ContextMenuPopup(BrowserWindow browserWindow)

Shows the context menu for the specified browser window.

Parameters:

  • browserWindow - The browser window to show the context menu for

🧊 void SetApplicationMenu(MenuItem[] menuItems)

Sets the application menu for the entire application.

Parameters:

  • menuItems - Array of MenuItem objects defining the application menu

🧊 void SetContextMenu(BrowserWindow browserWindow, MenuItem[] menuItems)

Sets a context menu for a specific browser window.

Parameters:

  • browserWindow - The browser window to attach the context menu to
  • menuItems - Array of MenuItem objects defining the context menu

Usage Examples

Application Menu

// Create application menuvarmenuItems=new[]{newMenuItem{Label="File",Submenu=new[]{newMenuItem{Label="New",Click=()=>CreateNewDocument()},newMenuItem{Label="Open",Click=()=>OpenDocument()},newMenuItem{Type=MenuType.Separator},newMenuItem{Label="Exit",Click=()=>Electron.App.Quit()}}},newMenuItem{Label="Edit",Submenu=new[]{newMenuItem{Role=MenuRole.Undo},newMenuItem{Role=MenuRole.Redo},newMenuItem{Type=MenuType.Separator},newMenuItem{Role=MenuRole.Cut},newMenuItem{Role=MenuRole.Copy},newMenuItem{Role=MenuRole.Paste}}},newMenuItem{Label="View",Submenu=new[]{newMenuItem{Role=MenuRole.Reload},newMenuItem{Role=MenuRole.ForceReload},newMenuItem{Role=MenuRole.ToggleDevTools},newMenuItem{Type=MenuType.Separator},newMenuItem{Role=MenuRole.ResetZoom},newMenuItem{Role=MenuRole.ZoomIn},newMenuItem{Role=MenuRole.ZoomOut}}},newMenuItem{Label="Window",Submenu=new[]{newMenuItem{Role=MenuRole.Minimize},newMenuItem{Role=MenuRole.Close}}}};// Set application menuElectron.Menu.SetApplicationMenu(menuItems);

Context Menu

// Create context menu for specific windowvarcontextMenuItems=new[]{newMenuItem{Label="Copy",Click=()=>CopySelectedText()},newMenuItem{Label="Paste",Click=()=>PasteText()},newMenuItem{Type=MenuType.Separator},newMenuItem{Label="Inspect Element",Click=()=>InspectElement()}};// Set context menu for windowElectron.Menu.SetContextMenu(mainWindow,contextMenuItems);// Show context menu programmaticallyElectron.Menu.ContextMenuPopup(mainWindow);

Menu with Keyboard Shortcuts

// Create menu with keyboard shortcutsvarmenuItems=new[]{newMenuItem{Label="File",Submenu=new[]{newMenuItem{Label="New",Accelerator="CmdOrCtrl+N",Click=()=>CreateNewDocument()},newMenuItem{Label="Open",Accelerator="CmdOrCtrl+O",Click=()=>OpenDocument()},newMenuItem{Label="Save",Accelerator="CmdOrCtrl+S",Click=()=>SaveDocument()}}}};Electron.Menu.SetApplicationMenu(menuItems);

Dynamic Menu Updates

// Update menu items dynamicallyvarfileMenu=Electron.Menu.MenuItems.FirstOrDefault(m =>m.Label=="File");if(fileMenu?.Submenu!=null){varsaveItem=fileMenu.Submenu.FirstOrDefault(m =>m.Label=="Save");if(saveItem!=null){saveItem.Enabled=HasUnsavedChanges;}}

Platform-Specific Menus

// macOS specific menu itemsif(RuntimeInformation.IsOSPlatform(OSPlatform.OSX)){varmacMenuItems=new[]{newMenuItem{Label="MyApp",Submenu=new[]{newMenuItem{Role=MenuRole.About},newMenuItem{Type=MenuType.Separator},newMenuItem{Role=MenuRole.Services},newMenuItem{Type=MenuType.Separator},newMenuItem{Role=MenuRole.Hide},newMenuItem{Role=MenuRole.HideOthers},newMenuItem{Role=MenuRole.Unhide},newMenuItem{Type=MenuType.Separator},newMenuItem{Role=MenuRole.Quit}}}};// Insert before File menuvarallMenus=newList<MenuItem>(macMenuItems);allMenus.AddRange(menuItems);Electron.Menu.SetApplicationMenu(allMenus.ToArray());}

Related APIs

Additional Resources

Clone this wiki locally