Skip to content

Fab & FabMenu

A Material Design-inspired floating action button (Fab) and a multi-action menu (FabMenu) that animates up from a main FAB with a staggered reveal. Each action supports Icon, Text, and Command, plus full color and border customization.

  • NuGet downloads for Shiny.Maui.Controls
ClosedMenu Open
FAB ClosedFAB Menu Open

A single floating action button. Tap triggers Command (and fires the Clicked event).

<!-- Icon-only circular Fab -->
<shiny:Fab Icon="add.png"
FabBackgroundColor="#E91E63"
Command="{Binding AddCommand}"
HorizontalOptions="End"
VerticalOptions="End"
Margin="24" />
<!-- Extended Fab with text -->
<shiny:Fab Icon="add.png"
Text="Add Item"
FabBackgroundColor="#4CAF50"
TextColor="White"
Command="{Binding AddCommand}"
HorizontalOptions="End"
VerticalOptions="End"
Margin="24" />
<!-- Outlined Fab -->
<shiny:Fab Text="Save"
FabBackgroundColor="Transparent"
BorderColor="#9C27B0"
BorderThickness="2"
TextColor="#9C27B0"
Command="{Binding SaveCommand}" />
PropertyTypeDefaultDescription
IconImageSource?nullIcon displayed inside the button
Textstring?nullOptional label; when null the Fab is a perfect circle
CommandICommand?nullExecuted on tap
CommandParameterobject?nullParameter forwarded to the Command
FabBackgroundColorColor#2196F3Fill color
BorderColorColor?nullOutline stroke color
BorderThicknessdouble0Outline stroke thickness
TextColorColorWhiteLabel text color
FontSizedouble14Label font size
FontAttributesFontAttributesNoneLabel font attributes
Sizedouble56Height of the Fab (diameter when circular)
IconSizedouble24Icon image size
HasShadowbooltrueDrop shadow on/off

Events: Clicked.

A main Fab plus one or more FabMenuItem children that animate up (staggered) when the menu opens. IsOpen is two-way bindable.

<shiny:FabMenu IsOpen="{Binding IsMenuOpen}"
Icon="plus.png"
FabBackgroundColor="#2196F3"
HorizontalOptions="End"
VerticalOptions="End"
Margin="24">
<shiny:FabMenuItem Icon="share.png"
Text="Share"
FabBackgroundColor="#4CAF50"
Command="{Binding ShareCommand}" />
<shiny:FabMenuItem Icon="edit.png"
Text="Edit"
FabBackgroundColor="#FF9800"
Command="{Binding EditCommand}" />
<shiny:FabMenuItem Icon="delete.png"
Text="Delete"
FabBackgroundColor="#F44336"
Command="{Binding DeleteCommand}" />
</shiny:FabMenu>

Tapping the main Fab toggles IsOpen. Tapping a FabMenuItem executes its Command, raises ItemTapped, and (by default) closes the menu.

In addition to all main-Fab pass-throughs (Icon, Text, FabBackgroundColor, BorderColor, BorderThickness, TextColor):

PropertyTypeDefaultDescription
IsOpenboolfalseTwo-way bindable; opens/closes with animation
ItemsIList<FabMenuItem>emptyContent property — place items directly inside <shiny:FabMenu>
HasBackdropbooltrueShow dim backdrop behind the menu
BackdropColorColorBlackBackdrop color
BackdropOpacitydouble0.4Backdrop peak opacity
CloseOnBackdropTapbooltrueClose when backdrop tapped
CloseOnItemTapbooltrueClose after item tap
AnimationDurationuint200Duration (ms) of open/close animation

Events: ItemTapped(FabMenuItem). Methods: Open(), Close(), Toggle().

An action inside the menu — icon button plus side label.

PropertyTypeDefaultDescription
IconImageSource?nullIcon rendered inside the circular button
Textstring?nullSide label
CommandICommand?nullInvoked on tap
CommandParameterobject?nullParameter forwarded to the Command
FabBackgroundColorColor#2196F3Icon button fill
BorderColorColor?nullIcon button outline
BorderThicknessdouble0Icon button outline thickness
TextColorColorBlackSide-label text color
LabelBackgroundColorColorWhiteSide-label fill color
FontSizedouble13Side-label font size
Sizedouble44Icon button diameter
IconSizedouble20Icon image size

Events: Clicked.

Place Fab / FabMenu inside a Grid that fills the page — the same pattern used by BottomSheetView / ImageViewer — so the FabMenu’s backdrop can cover the main content.

<ContentPage>
<Grid>
<!-- Main page content -->
<ScrollView>
<!-- ... -->
</ScrollView>
<!-- Fab/FabMenu overlay on top -->
<shiny:FabMenu IsOpen="{Binding IsMenuOpen}"
Icon="plus.png"
HorizontalOptions="End"
VerticalOptions="End"
Margin="24">
<!-- items -->
</shiny:FabMenu>
</Grid>
</ContentPage>
claude plugin marketplace add shinyorg/skills
claude plugin install shiny-maui@shiny

Coming soon — Copilot plugin install instructions will be added here.

View shiny-maui Plugin