ContextMenu
A popup context menu that can be attached to any UI element. Opens on right-click (desktop) or long-press (touch devices).
Basic Usage
// Attach to any element
myElement.SetContextMenu(new ContextMenu()
.AddItem(new MenuItem().SetText("Cut").SetShortcut("Ctrl+X").SetCommand(vm.CutCommand))
.AddItem(new MenuItem().SetText("Copy").SetShortcut("Ctrl+C").SetCommand(vm.CopyCommand))
.AddItem(new MenuItem().SetText("Paste").SetShortcut("Ctrl+V").SetCommand(vm.PasteCommand))
.AddSeparator()
.AddItem(new MenuItem().SetText("Delete").SetCommand(vm.DeleteCommand)))
// Using builder pattern
myElement.SetContextMenu(menu => menu
.AddItem(new MenuItem().SetText("Refresh").SetCommand(vm.RefreshCommand))
.AddItem(new MenuItem().SetText("Properties").SetCommand(vm.PropertiesCommand)))
ContextMenu Methods
| Method | Description |
|---|---|
AddItem(MenuItem) |
Adds a menu item |
AddItem(MenuSeparator) |
Adds a separator |
AddSeparator() |
Adds a visual separator |
SetHoverBackgroundColor(Color) |
Sets item hover background |
BindHoverBackgroundColor(getter) |
Binds hover color |
SetTextColor(Color) |
Sets menu text color |
BindTextColor(getter) |
Binds text color |
SetCornerRadius(float) |
Sets menu corner radius |
BindCornerRadius(getter) |
Binds corner radius |
SetBorderColor(Color) |
Sets menu border color |
BindBorderColor(getter) |
Binds border color |
SetBorderWidth(float) |
Sets border width |
BindBorderWidth(getter) |
Binds border width |
Attaching to Elements
Any UiElement can have a context menu via extension methods:
| Method | Description |
|---|---|
SetContextMenu(ContextMenu) |
Sets context menu instance |
SetContextMenu(Action<ContextMenu>) |
Configures via builder callback |
Examples
File Explorer Context Menu
fileListItem.SetContextMenu(new ContextMenu()
.AddItem(new MenuItem().SetText("Open").SetCommand(vm.OpenCommand))
.AddItem(new MenuItem().SetText("Open With...")
.AddItem(new MenuItem().SetText("Notepad"))
.AddItem(new MenuItem().SetText("VS Code")))
.AddSeparator()
.AddItem(new MenuItem().SetText("Cut").SetShortcut("Ctrl+X"))
.AddItem(new MenuItem().SetText("Copy").SetShortcut("Ctrl+C"))
.AddSeparator()
.AddItem(new MenuItem().SetText("Delete").SetIcon("delete.png"))
.AddItem(new MenuItem().SetText("Rename").SetShortcut("F2"))
.AddSeparator()
.AddItem(new MenuItem().SetText("Properties").SetShortcut("Alt+Enter")))
Styled Context Menu
element.SetContextMenu(new ContextMenu()
.SetBackground(new Color(30, 30, 30))
.SetHoverBackgroundColor(new Color(50, 80, 120))
.SetTextColor(Colors.White)
.SetCornerRadius(4)
.SetBorderColor(new Color(60, 60, 60))
.SetBorderWidth(1)
.AddItem(new MenuItem().SetText("Action 1"))
.AddItem(new MenuItem().SetText("Action 2")))
Dynamic Context Menu
dataGridRow.SetContextMenu(menu =>
{
menu.AddItem(new MenuItem()
.SetText("Edit")
.BindIsEnabled(() => vm.CanEdit)
.SetCommand(vm.EditCommand));
if (vm.IsAdmin)
{
menu.AddSeparator();
menu.AddItem(new MenuItem().SetText("Admin Options")
.AddItem(new MenuItem().SetText("Force Delete")));
}
})
ContextMenu has
AccessibilityRole.Menu. It automatically closes when clicking outside or pressing Escape.