-
Notifications
You must be signed in to change notification settings - Fork 3
Context Menus
A context menu is a pop-up menu that provides shortcuts for actions related to the tapped item.
- Android: Menus
- iOS: Context menus
A context menu can be attached to any Element. In this example a context menu is attached to a Button with one ContextMenuItem. The ItemClickedCommand is bound to a Command, thus, when any item is tapped, the Command will be executed.
<dui:Button Text="Open context menu">
<dui:ContextMenuEffect.Menu>
<dui:ContextMenu ItemClickedCommand="{Binding ItemClickedCommand}">
<dui:ContextMenuItem Title="Tap me" />
</dui:ContextMenu>
</dui:ContextMenuEffect.Menu>
</dui:Button>There are two context menu-modes:
- Pressed (default)
- LongPressed
This mode requires people to tap to show a context menu.
<dui:Button Text="Open context menu" dui:ContextMenuEffect.Mode="Pressed">
<dui:ContextMenuEffect.Menu>
...
</dui:ContextMenuEffect.Menu>
</dui:Button>This mode requires people to long-tap the Element to show the context menu.
On iOS a "preview" of the
Elementwill be displayed.
<dui:Button Text="Open context menu" dui:ContextMenuEffect.Mode="LongPressed">
<dui:ContextMenuEffect.Menu>
...
</dui:ContextMenuEffect.Menu>
</dui:Button>Click events on ContextMenuItems can be subscribed to inside UseDIPSUI() in MauiProgram.cs:
...
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.UseDIPSUI(options =>
{
options.SetContextMenuItemClickedCallback(OnContextMenuItemClicked);
});
...
private static void OnContextMenuItemClicked(ContextMenuItem item)
{
Console.WriteLine($"Clicked context menu item with title {item.Title}!");
}
...To attach a Context Menu to a ToolbarItem we have created a ContextMenuToolbarItem, which has a ContextMenu property.
<dui:ContentPage.ToolbarItems>
<dui:ContextMenuToolbarItem Text="Tap">
<dui:ContextMenuToolbarItem.ContextMenu>
<dui:ContextMenu Title="Context menu">
<dui:ContextMenuItem Title="Item 1" />
</dui:ContextMenu>
</dui:ContextMenuToolbarItem.ContextMenu>
</dui:ContextMenuToolbarItem>
</dui:ContentPage.ToolbarItems>NB! Attaching a Context Menu on a
ToolbarItemis only supported when the Application is run onShell.
- Long-Pressed Mode are not supported (yet) on ToolbarItems
In MAUI, off-tree objects like ContextMenu cannot reliably use BindingContext="{Binding ...}" in XAML, because the binding is evaluated immediately at creation, when the BindingContext is null. It does not re-evaluate when the parent view’s BindingContext is later set.
Does NOT work
<Grid WidthRequest="100" HeightRequest="100"
BackgroundColor="Red"
dui:ContextMenuEffect.Mode="LongPressed">
<dui:ContextMenuEffect.Menu>
<dui:ContextMenu BindingContext="{Binding ContextMenuViewModel}">
<dui:ContextMenuItem Title="{Binding Name}" />
</dui:ContextMenu>
</dui:ContextMenuEffect.Menu>
</Grid>ContextMenuViewModel is never resolved because the menu is off-tree and its BindingContext is null when created.
Works with new property
<Grid WidthRequest="100" HeightRequest="100"
BackgroundColor="Red"
dui:ContextMenuEffect.Mode="LongPressed"
dui:ContextMenuEffect.MenuBindingContext="{Binding ContextMenuViewModel}">
<dui:ContextMenuEffect.Menu>
<dui:ContextMenu>
<dui:ContextMenuItem Title="{Binding Name}" />
</dui:ContextMenu>
</dui:ContextMenuEffect.Menu>
</Grid>MenuBindingContext is set in code by the library when the menu is attached.
All child bindings Title="{Binding Name}" now evaluates correctly.
Inspect the components properties class to further customize and use it.
- Accessibility
- Alerting
- AmplitudeView
- Animations
- AutoScrollingTextView
- Bottom sheet
- Buttons
- Camera
- Checkboxes
- Chip
- CollectionView
- Colors
- Content control
- Context Menus
- Converters
- CornerRadius
- Counters
- DelayedView
- Dialogs
- Displaying code inside a mobile app
- Divider
- Getting Started
- HideSoftInputOnTapped
- Icons
- ImageCapture
- Images
- Labels
- ListItem
- Loading
- Pages
- Performance
- Pickers
- Providing help in your app
- SaveView
- Searching
- Sizes
- SlidableContentLayout
- SortControl
- Splash screen
- StateView
- StatusBar
- Tab Badge
- TabView
- Tag
- TextFields
- Touch
Components
- Buttons
- Checkboxes
- Chip
- CollectionView
- Content control
- Context Menus
- Counters
- Divider
- Labels
- ListItem
- Pickers
- SaveView
- SortControl
- Tag
- TextFields
Feedback
&
State
Guides
Interaction
&
Accessibility
Layout
&
Navigation
Media
Styling
&
Resources