Skip to content
Introducing AI Conversations: Natural Language Interaction for Your Apps! Learn More

FloatingPanel

A floating panel overlay that slides in from the bottom or top of the screen with configurable snap positions (detents), optional header peek when closed, backdrop dimming, pan gestures, feedback, and automatic keyboard handling. Requires an OverlayHost container (or the convenience ShinyContentPage base class).

  • NuGet downloads for Shiny.Maui.Controls
Frameworks
.NET MAUI
ClosedOpenTop (Peek)Top (Open)Dual (Peek)Dual (Open)Music Player
ClosedOpenTop PeekTop OpenDual PeekDual OpenMusic Player

FloatingPanel must live inside an OverlayHost (a transparent Grid that manages backdrops). The easiest approach is to use ShinyContentPage as your page base class:

<shiny:ShinyContentPage xmlns:shiny="http://shiny.net/maui/controls"
x:Class="MyApp.MyPage">
<shiny:ShinyContentPage.PageContent>
<ScrollView>
<VerticalStackLayout Padding="20" Spacing="10">
<Button Text="Open Panel" Command="{Binding OpenCommand}" />
</VerticalStackLayout>
</ScrollView>
</shiny:ShinyContentContent>
<shiny:ShinyContentPage.Panels>
<shiny:FloatingPanel IsOpen="{Binding IsPanelOpen, Mode=TwoWay}">
<VerticalStackLayout Padding="20" Spacing="10">
<Label Text="Panel Content" FontSize="18" FontAttributes="Bold" />
<Label Text="Drag the handle or tap the backdrop to close." />
</VerticalStackLayout>
</shiny:FloatingPanel>
</shiny:ShinyContentPage.Panels>
</shiny:ShinyContentPage>

Or use OverlayHost directly inside any page:

<ContentPage>
<Grid>
<!-- Main page content -->
<ScrollView>
<VerticalStackLayout>
<Button Text="Open Panel" Command="{Binding OpenCommand}" />
</VerticalStackLayout>
</ScrollView>
<!-- Overlay layer -->
<shiny:OverlayHost>
<shiny:FloatingPanel IsOpen="{Binding IsOpen, Mode=TwoWay}">
<Label Text="Panel content" />
</shiny:FloatingPanel>
</shiny:OverlayHost>
</Grid>
</ContentPage>
  • Pan gesture — Drag up/down between detents via the handle; swipe past the lowest to close
  • Keyboard handling — Auto-expands to highest detent when an Entry/Editor is focused, restores on dismiss
  • ScrollView integration — Scroll enabled only at the highest detent; disabled at lower detents so pan gestures work
  • Backdrop — Semi-transparent overlay managed by OverlayHost; supports multiple simultaneous panels
  • Locked modeIsLocked="True" hides the drag handle and disables pan gestures. The panel can only be opened/closed via binding. Ideal for signature capture, selectors, or confirmation dialogs
  • Fit contentFitContent="True" measures content and auto-computes a single detent to fit, ignoring the Detents collection
  • Top, bottom, or bottom with tabsPosition="Top" slides from the top, Position="BottomTabs" clips above a Shell TabBar
  • Header peek — Provide HeaderTemplate and set ShowHeaderWhenClosed="True" to show a tap/drag target when the panel is closed
  • Feedback — Tactile click on open, close, and detent snap (disable with UseFeedback="False")
  • Corner radius — Configurable via PanelCornerRadius (auto-flips for top vs bottom positioning)

OverlayHost is a transparent Grid that manages backdrop dimming for overlay clients (FloatingPanel, Overlay, LoadingOverlay). It tracks active clients and only hides the backdrop when all are dismissed. Tapping the backdrop dismisses all active clients (FloatingPanels that allow it, and Overlays).

PropertyTypeDefaultDescription
BackdropColorColorBlackColor of the dimming overlay
BackdropMaxOpacitydouble0.5Maximum backdrop opacity when clients are active

ShinyContentPage is a convenience ContentPage subclass with a built-in OverlayHost. Use PageContent for your main content and Panels for floating panels and overlays:

PropertyTypeDescription
PageContentView?Your main page content (replaces Content)
PanelsIList<IView>Collection of FloatingPanel, Overlay, or LoadingOverlay instances
BackdropColorColorForwarded to the internal OverlayHost
BackdropMaxOpacitydoubleForwarded to the internal OverlayHost
claude plugin marketplace add shinyorg/skills
claude plugin install controls@shiny
copilot plugin marketplace add https://github.com/shinyorg/skills
copilot plugin install controls@shiny
View controls Plugin