可以使用 .NET MAUI 应用 项目模板创建 .NET 多平台应用 UI (.NET MAUI) Shell 应用,然后通过描述类中 AppShell
应用的视觉层次结构。
有关如何创建 Shell 应用的分步演练,请参阅 “创建 .NET MAUI 应用”。
描述应用的视觉层次结构
.NET MAUI Shell 应用的视觉层次结构在项目模板名称AppShell
的Shell子类中进行了描述。 子类 Shell 由三个主要分层对象组成:
- FlyoutItem 或 TabBar。 FlyoutItem 表示浮出控件中的一个或多个项,应在应用的导航模式需要浮出控件时使用。 TabBar 表示底部选项卡栏,应在应用的导航模式以底部选项卡开始且不需要浮出控件时使用。 每个 FlyoutItem 对象或 TabBar 对象都是对象的 Shell 子对象。
- Tab,表示分组内容,可通过底部选项卡导航。 每个Tab对象都是FlyoutItem对象或TabBar对象的子对象。
- 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 中声明的第一项内容:
按菜单图标或从左侧轻扫可以显示弹出菜单:
浮出控件上显示多个项,因为属性 FlyoutDisplayOptions 设置为 AsMultipleItems
。 有关详细信息,请参阅 浮出控件显示选项。
重要
在 Shell 应用中,页面是按需创建的,以响应导航。 这是通过使用DataTemplate标记扩展将每个ShellContent对象的ContentTemplate
属性设置为ContentPage对象来实现的。