.NET MAUI 修改AppShell.xaml文件,用以显示添加的页面(三)
问题
.NET MAUI添加Page.xaml文件后,如何让页面显示在启动界面(当然也可以按流程显示页面)
方法
AppShell 类定义了应用的视觉对象层次结构,即用于创建应用 UI 的 XAML 标记。 更新 XAML 以添加 TabBar 控件:
<?xml version="1.0" encoding="UTF-8" ?> <Shell x:Class="Notes.AppShell" xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Notes" Shell.FlyoutBehavior="Disabled" Title="Notes"> <ShellContent Title="Home" ContentTemplate="{DataTemplate local:MainPage}" Route="MainPage" /> </Shell>
修改代码如下:
<?xml version="1.0" encoding="UTF-8" ?> <Shell x:Class="Notes.AppShell" xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Notes" Shell.FlyoutBehavior="Disabled" Title="Notes"> <TabBar> <ShellContent Title="笔记" ContentTemplate="{DataTemplate local:MainPage}" Icon="{OnPlatform 'icon_notes.png', iOS='icon_notes_ios.png', MacCatalyst='icon_notes_ios.png'}" /> <ShellContent Title="关于" ContentTemplate="{DataTemplate local:AboutPage}" Icon="{OnPlatform 'icon_about.png', iOS='icon_about_ios.png', MacCatalyst='icon_about_ios.png'}" /> </TabBar> </Shell>
让我们分解 XAML 的关键部分:
<Shell> 是 XAML 标记的根对象。
<TabBar> 是 Shell 的内容。
<TabBar> 内的两个 <ShellContent> 对象。 在替换模板代码之前,存在一个指向 MainPage 页的 <ShellContent> 对象。
TabBar 及其子项不表示任何用户界面元素,而是表示应用的视觉对象层次结构的组织。 Shell 会采用这些对象并生成内容的用户界面,顶部有表示每个页面的栏。
ShellContent.Icon 属性设置
语法结构
Title="笔记" ContentTemplate="{DataTemplate local:MainPage}" Icon="{OnPlatform ...}"
Title => 代表页面标题;
ContentTemplate => 指向显示的页面,{DataTemplate local:AboutPage} 中local代表根命名空间,AboutPage代表只想AboutPage.xaml页面文件;假定存在Notes.Views命名空间,则{DataTemplate local:AboutPage}可变更为{DataTemplate Views:AboutPage1},这行Notes.Views命名空间的AboutPage1.xaml页面;
Icon => 设置图标,Icon="{OnPlatform 'icon_about.png', iOS='icon_about_ios.png', MacCatalyst='icon_about_ios.png'}",在这种情况下,每个平台默认使用 icon_about.png 图标,但 iOS 和 MacCatalyst 将使用 icon_about_ios.png。