A Microsoft open-source framework for building native device applications spanning mobile, tablet, and desktop.
For a tablet-first .NET MAUI POS app on .NET 10, the platform guidance in the context points toward using Shell for navigation and app structure, and then building the POS layout itself as a custom page hierarchy within that Shell.
- Root layout / Shell
.NET MAUI Shell is designed to give a single place to describe the visual hierarchy, a common navigation experience, and URI-based navigation for any page in the app. It also lets pages define their own appearance (colors, nav bar, tab bar, title view, etc.) via attached properties.
For a POS:
- Use a standard
AppShellas the root to define the overall structure (flyout items, tabs, high-level sections). - Implement the actual POS workspace (product catalog + cart) as one or more
ContentPages that use aGridor other layout to create the split view. - If a persistent sidebar is needed, it can be:
- A
FlyoutItemwithFlyoutBehavior="Locked"for a permanent left menu, or - A custom
Grid-based layout inside a singleContentPagewhere the left column is the catalog/navigation and the right column is the cart.
- A
Shell supports multiple ShellContent entries per Tab, which are navigable via top tabs. That can be used for multi-pane workflows if needed. Pages are typically created on demand via DataTemplate in ShellContent, which keeps startup lean.
- Authentication flow
Shell provides attached properties to control page appearance, including hiding the navigation bar or tab bar on specific pages. For example, a LoginPage can:
- Disable the navigation bar using the
NavBarIsVisibleattached property. - Use
Shell.TitleViewto completely control what appears in the nav bar when visible.
Shell also respects page visibility via IsVisible. A page with IsVisible = false cannot be navigated to. This can be used to hide authenticated-only sections until login is complete.
The context does not prescribe a single “standard” login pattern, but within Shell the common pattern is:
- Keep
AppShellas the root. - Use Shell navigation to move between
LoginPageand the main POS pages. - Control nav bar visibility and other chrome via Shell attached properties instead of swapping
Application.Current.MainPage.
- Routing and navigation
Shell provides a URI-based navigation scheme that permits navigation to any page in the app. Pages are defined as ShellContent within FlyoutItem or Tab elements, typically using DataTemplate to create pages on demand. This avoids reflection-based registration:
- Define the visual hierarchy and routes declaratively in
AppShellXAML. - Use Shell’s URI navigation to move between pages.
- The
BindingContextof eachShellContentis inherited from the parentTab, which can be used with DI to provide view models at the tab level.
This approach removes the need for reflection-based route discovery and keeps routing explicit and predictable.
- Design / UI patterns for tablet POS
The context shows several Shell capabilities that are useful for a tablet POS layout:
- Use
Shell.TitleViewto place custom views (e.g., status indicators, user info, quick actions) in the navigation bar. This can be anyView, including a layout with multiple children. - Use a
ContentPageas the root of the POS workspace, with aGridorStackLayoutto create a split view (catalog vs. cart).ContentPagecan only have one child, so use a layout (e.g.,Grid) as that child and place multiple regions inside it. - For data-heavy UIs, use layouts like
VerticalStackLayoutandHorizontalStackLayoutinside the grid regions to organize controls.
Shell’s page configuration features (colors, nav bar visibility, tab bar visibility, title view) let the POS workspace be full-screen and focused, while still benefiting from Shell’s navigation and URI routing.
Putting it together for a .NET 10 tablet POS skeleton:
- Root:
AppShelldefines high-level sections (POS, reports, settings) asFlyoutItem/Tab/ShellContententries. - POS workspace: a
ContentPagecreated viaShellContentContentTemplate, whose content is aGridwith columns for catalog and cart. - Authentication: a
LoginPagewithin Shell, with nav bar hidden viaNavBarIsVisibleand visibility-controlled access to authenticated sections. - Routing: explicit Shell hierarchy and URI navigation, no reflection-based registration.
- Chrome: use
Shell.TitleViewfor custom header content on POS pages; hide nav bar where needed.
References: