PleasantMenu

April 9, 2026 · View on GitHub

A flyout-style application menu with a title, optional info badges, a grid of large icon buttons (PleasantMenuItem), and a footer bar with small utility buttons (PleasantMenuFooterItem).

Basic usage

<Button Content="Menu">
    <Button.Flyout>
        <Flyout>
            <PleasantMenu Title="My App" Columns="3">
                <PleasantMenu.Items>
                    <PleasantMenuItem Label="Open"
                                      Icon="{DynamicResource FolderOpenRegular}"
                                      Command="{Binding OpenCommand}" />
                    <PleasantMenuItem Label="Save"
                                      Icon="{DynamicResource SaveRegular}"
                                      Command="{Binding SaveCommand}" />
                    <PleasantMenuItem Label="Export"
                                      Icon="{DynamicResource ArrowExportRegular}"
                                      Command="{Binding ExportCommand}" />
                </PleasantMenu.Items>
                <PleasantMenu.FooterItems>
                    <PleasantMenuFooterItem Icon="{DynamicResource TuneRegular}"
                                           Command="{Binding SettingsCommand}"
                                           ToolTip="Settings" />
                    <PleasantMenuFooterItem Icon="{DynamicResource QuestionCircleRegular}"
                                           Command="{Binding HelpCommand}"
                                           ToolTip="Help"
                                           AlignRight="True" />
                </PleasantMenu.FooterItems>
            </PleasantMenu>
        </Flyout>
    </Button.Flyout>
</Button>

PleasantMenu properties

PropertyTypeDefaultDescription
Titlestring""Text shown in the top-left header
Columnsint3Number of columns in the items grid
ItemsAvaloniaList<PleasantMenuItem>Large icon button items in the grid
FooterItemsAvaloniaList<PleasantMenuFooterItem>Small icon buttons in the footer bar
Badgesobject?nullArbitrary content (e.g. notification badges) shown in the header top-right
ShowFooterbooltrueWhether the footer bar is visible
ItemMinWidthdouble100Minimum width of each grid item button
ItemMinHeightdouble70Minimum height of each grid item button

PleasantMenuItem properties

PropertyTypeDescription
IconGeometry?Icon geometry displayed in the button
LabelstringText shown below the icon
CommandICommand?Command invoked on click
CommandParameterobject?Parameter passed to Command
SecondaryCommandICommand?When set, adds a chevron dropdown button next to the main button
ToolTipstring?Tooltip text
IsEnabledboolWhether the button is enabled

PleasantMenuFooterItem properties

PropertyTypeDescription
IconGeometry?Icon geometry
CommandICommand?Command invoked on click
CommandParameterobject?Parameter passed to Command
ToolTipstring?Tooltip text
IsEnabledboolWhether the button is enabled
AlignRightboolWhen true, the button is right-aligned in the footer

Split button item

Set SecondaryCommand on a PleasantMenuItem to split it into a main action and a dropdown chevron:

<PleasantMenuItem Label="New"
                  Icon="{DynamicResource AddRegular}"
                  Command="{Binding NewFileCommand}"
                  SecondaryCommand="{Binding NewFromTemplateCommand}" />

Badges in header

<PleasantMenu Title="Notifications">
    <PleasantMenu.Badges>
        <Border Background="{DynamicResource SystemFillColorCritical}"
                CornerRadius="999" Padding="4 2">
            <TextBlock Text="3" Foreground="White" FontSize="10" />
        </Border>
    </PleasantMenu.Badges>
</PleasantMenu>