Everything inherited from NavigationPage — PushAsync, PopAsync, PopToRootAsync, Peek,
CurrentPage, RootPage, Pushed, Popped, PoppedToRoot, BarBackground,
BarBackgroundColor, BarTextColor and all of its attached properties — keeps its own meaning and is
not repeated here.
Property
Type
Default
Notes
IsNavBarVisible
bool
true
Hides the bar over every page. For one page use ShinyNav.IsNavBarVisible.
Property
Type
Default
Notes
TitleAlignment
NavBarTitleAlignment
Auto
Auto centres on iOS/Mac Catalyst, leads elsewhere.
TitleFontSize
double
unset
Follows the theme’s title-large size.
TitleFontFamily
string?
null
Follows the theme’s family.
TitleFontAttributes
FontAttributes
Bold
Property
Type
Default
Notes
LargeTitleDisplay
LargeTitleDisplay
None
Inherit resolves to None here.
LargeTitleHeight
double
52
Height of the row at rest.
LargeTitleCollapseDistance
double
48
Scroll distance over which it folds. ≤ 0 folds the moment the page moves.
LargeTitleFontSize
double
unset
Follows the theme’s headline-medium size.
Property
Type
Default
BarHeight
double
56
BarPadding
Thickness
4,0
HasShadow
bool
true
HasSeparator
bool
false
ItemSpacing
double
2
IconSize
double
22
MaxVisibleItems
int
3 (per side; ≤ 0 = no limit)
OverflowIcon
string?
null (the three-dot glyph)
MenuTemplate
DataTemplate?
null
AnimationDuration
uint
180
BarIconColor
Color?
null
RespectSafeArea
bool
true
StatusBarStyle
StatusBarStyle
Auto
StatusBarColor
Color?
null
BarIconColor, not IconColor
NavigationPage.IconColor is MAUI’s own attached property and is the per-page override. This one
is only the default for it, and is named apart so the two cannot be confused — or shadow each other.
RespectSafeArea insets inside the background
MAUI applies an inset by offsetting the view that carries it, so Container goes on the view inside
the bar’s background — on the bar or on its Border it would move the whole background down and leave
a strip of page above it. The bar, the grid a page’s content is wrapped in and the overlay root are
all SafeAreaEdges="None" so the background can reach the top edge at all. The page’s own content
keeps MAUI’s default for its type, so a layout still insets itself out of the home indicator. See
Status Bar & Safe Area .
Property
Type
Default
Notes
EnableSwipeBackGesture
bool
true
iOS only. UIKit disables the edge-swipe pop while the bar is hidden; this puts it back.
What the status bar can actually be told, per head:
Background behind the clock
Clock & icon colour
iOS / Mac Catalyst
✅ the bar’s, through the safe-area inset
✅ needs UIViewControllerBasedStatusBarAppearance = false in Info.plist
Android (all versions)
✅
❌ does not currently take — see Status Bar & Safe Area
Windows, GTK4, macOS AppKit
no status bar
—
Member
Notes
static ShinyNavBar? GetNavBar(Page page)
The bar drawn over a page, or null.
ShinyNavBar? CurrentNavBar
The bar over the page that is showing.
event EventHandler<NavBarItemEventArgs> NavBarItemInvoked
An item on any of this page’s bars was tapped.
Badge and BadgeColor are the two that go on an item rather than the page — see below.
Property
Type
Default
Notes
LeftItems
NavBarItemCollection
live, empty
Drawn after the back button.
RightItems
NavBarItemCollection
live, empty
Drawn after the page’s own ToolbarItems.
Subtitle
string?
null
A second line under the title.
LargeTitle
string?
null
Falls back to Page.Title.
LargeTitleDisplay
LargeTitleDisplay
Inherit
Inherit = follow the navigation page.
ScrollSource
View?
null
Unset: the first ScrollView/ItemsView found.
IsNavBarVisible
bool
true
The runtime switch — see the caution below.
BarBackgroundColor
Color?
null
Overrides the navigation page’s.
BarTextColor
Color?
null
Overrides the navigation page’s.
StatusBarStyle
StatusBarStyle
Inherit
Inherit = follow the navigation page.
TitleAlignment
NavBarTitleAlignment
Auto
Auto = follow the navigation page.
BackButtonIcon
string?
null
A motion icon name instead of the chevron.
BackButtonCommand
ICommand?
null
Runs instead of popping. Nothing is popped for you.
BackButtonCommandParameter
object?
null
Property
Type
Default
Notes
Badge
string?
null
"" is a dot , null is nothing. On a NavBarItem, that item’s own Badge wins while it is non-null.
BadgeColor
Color?
null
Follows the theme’s error colour.
SetHasNavigationBar is the starting value, not the switch
It is honoured when the page is first installed, but the drawn bar exists because that property was
forced to false to hide the native one — so a page writing false to it again raises nothing and
cannot be observed. Use ShinyNav.IsNavBarVisible at runtime.
Inherits Text, IconImageSource, Command, CommandParameter, IsEnabled, IsDestructive,
Clicked, Order, Priority and AutomationId, all unchanged.
Property
Type
Default
Notes
Icon
string?
null
A built-in motion icon name.
IconSource
MotionIconDefinition?
null
Explicit motion artwork. Beats Icon.
IconPathData
string?
null
A raw SVG path in a 24×24 box.
Motion
MotionPreset
Default
Which motion the icon plays.
IconColor
Color?
null
Tints motion artwork only; a bitmap is drawn as supplied.
Badge
string?
null
"" is a dot , null is nothing. Plain ToolbarItems use ShinyNav.Badge.
BadgeColor
Color?
null
Follows the theme’s error colour.
Display
NavBarItemDisplay
Auto
Auto/Icon/Text/IconAndText.
IsVisible
bool
true
Hides without removing.
IsSeparator
bool
false
A divider — in the overflow menu only.
Tag
object?
null
Usable standalone at the top of any layout. It owns no navigation.
Property
Type
Default
LeftItems / RightItems
IList<ToolbarItem>
empty
Title / Subtitle / LargeTitle
string?
null
TitleView
View?
null
TitleIcon
ImageSource?
null
TitleAlignment
NavBarTitleAlignment
Auto
LargeTitleDisplay
LargeTitleDisplay
None
CollapseProgress
double
0 — 0 open, 1 folded; bindable
BarBackground
Brush?
null — beats BarBackgroundColor
BarBackgroundColor / BarTextColor / IconColor
Color?
null
BarHeight / BarPadding / HasShadow / HasSeparator
56 / 4,0 / true / false
ItemSpacing / IconSize / MaxVisibleItems
2 / 22 / 3
OverflowIcon / MenuTemplate / AnimationDuration
null / null / 180
IsBackButtonVisible / BackButtonText / BackButtonIcon
false / null / null
BackButtonCommand / BackButtonCommandParameter
null
Member
Notes
bool IsMenuOpen
True while an overflow menu is on screen.
void OpenMenu(NavBarSide side)
Does nothing when that side has no overflow.
void CloseMenu()
void AttachScrollSource(View? source)
What the collapsing large title follows. null stops.
event EventHandler<NavBarItemEventArgs> ItemInvoked
After the item’s own command and Clicked.
event EventHandler<NavBarBackEventArgs> BackButtonPressed
Set e.Cancel = true to stop the pop.
NavBarTitleAlignment — Auto, Start, Center
LargeTitleDisplay — Inherit, None, Always, Collapsing
NavBarItemDisplay — Auto, Icon, Text, IconAndText
NavBarSide — Left, Right
StatusBarStyle — Inherit, Auto, LightContent, DarkContent, None
Claude Code GitHub Copilot
Step 1 — Add the marketplace:
claude plugin marketplace add shinyorg/skillsStep 2 — Install the plugin:
claude plugin install shiny@shinyOne plugin installs all 39 Shiny skills. Your agent loads only the skill relevant to what you're building, so there's no cost to having them all available.
Step 1 — Add the marketplace:
copilot plugin marketplace add https://github.com/shinyorg/skillsStep 2 — Install the plugin:
copilot plugin install shiny@shinyOne plugin installs all 39 Shiny skills. Your agent loads only the skill relevant to what you're building, so there's no cost to having them all available.
View Skills Repository