创建 .NET MAUI Shell 应用

浏览示例。 浏览示例

可以使用 .NET MAUI 应用 项目模板创建 .NET 多平台应用 UI (.NET MAUI) Shell 应用,然后通过描述类中 AppShell 应用的视觉层次结构。

有关如何创建 Shell 应用的分步演练,请参阅 “创建 .NET MAUI 应用”。

描述应用的视觉层次结构

.NET MAUI Shell 应用的视觉层次结构在项目模板名称AppShellShell子类中进行了描述。 子类 Shell 由三个主要分层对象组成:

  1. FlyoutItemTabBarFlyoutItem 表示浮出控件中的一个或多个项,应在应用的导航模式需要浮出控件时使用。 TabBar 表示底部选项卡栏,应在应用的导航模式以底部选项卡开始且不需要浮出控件时使用。 每个 FlyoutItem 对象或 TabBar 对象都是对象的 Shell 子对象。
  2. Tab,表示分组内容,可通过底部选项卡导航。 每个Tab对象都是FlyoutItem对象或TabBar对象的子对象。
  3. ShellContent,表示 ContentPage 每个选项卡的对象。每个 ShellContent 对象都是对象的 Tab 子对象。 当多个对象存在于一个ShellContentTab对象中时,这些对象将由顶部选项卡导航。

这些对象不表示任何用户界面,而是表示应用的视觉层次结构的组织。 Shell 将获取这些对象并生成内容的导航用户界面。

以下 XAML 显示了一个被子类化的 Shell 类的示例:

<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
       xmlns:views="clr-namespace:Xaminals.Views"
       x:Class="Xaminals.AppShell">
    ...
    <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
        <Tab Title="Domestic"
             Icon="paw.png">
            <ShellContent Title="Cats"
                          Icon="cat.png"
                          ContentTemplate="{DataTemplate views:CatsPage}" />
            <ShellContent Title="Dogs"
                          Icon="dog.png"
                          ContentTemplate="{DataTemplate views:DogsPage}" />
        </Tab>
        <!--
        Shell has implicit conversion operators that enable the Shell visual hierarchy to be simplified.
        This is possible because a subclassed Shell object can only ever contain a FlyoutItem object or a TabBar object,
        which can only ever contain Tab objects, which can only ever contain ShellContent objects.

        The implicit conversion automatically wraps the ShellContent objects below in Tab objects.
        -->
        <ShellContent Title="Monkeys"
                      Icon="monkey.png"
                      ContentTemplate="{DataTemplate views:MonkeysPage}" />
        <ShellContent Title="Elephants"
                      Icon="elephant.png"
                      ContentTemplate="{DataTemplate views:ElephantsPage}" />
        <ShellContent Title="Bears"
                      Icon="bear.png"
                      ContentTemplate="{DataTemplate views:BearsPage}" />
    </FlyoutItem>
    ...
</Shell>

运行时,此 XAML 会显示 CatsPage,因为它是在子类 Shell 中声明的第一项内容:

Shell 应用的屏幕截图

按菜单图标或从左侧轻扫可以显示弹出菜单:

Shell 浮出控件的屏幕截图。

浮出控件上显示多个项,因为属性 FlyoutDisplayOptions 设置为 AsMultipleItems。 有关详细信息,请参阅 浮出控件显示选项

重要

在 Shell 应用中,页面是按需创建的,以响应导航。 这是通过使用DataTemplate标记扩展将每个ShellContent对象的ContentTemplate属性设置为ContentPage对象来实现的。