Cvičení: Implementace navigace na kartách
V aplikaci astronomie se zobrazí výzva ke kombinování karet s informačním rámečkem, který vám pomůže s navigaci mezi různými stránkami.
První věc, kterou se rozhodnete udělat, je odebrat všechny stránky z informačního rámečku a přidat je do , TabBar
abyste viděli, jak se aplikace cítí.
Přidání panelu karet
V okně Průzkumník řešení otevřete stránku AppShell.xaml.
Na stránce kódu XAML odstraňte všechno uvnitř
<Shell>
souboru .Vytvoření
<TabBar>
a prázdné<Tab>
.<?xml version="1.0" encoding="UTF-8" ?> <Shell x:Class="Astronomy.AppShell" xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Astronomy.Pages" FlyoutIcon="moon.png"> <TabBar> <Tab> </Tab> </TabBar> </Shell>
Dále přidejte
ShellContent
doTab
souboru a nastavte jeho obsah naMoonPhasePage
hodnotu .<TabBar> <Tab> <ShellContent ContentTemplate="{DataTemplate local:MoonPhasePage}" /> </Tab> </TabBar>
Teď dejte kartě název, který se má zobrazit, a ikonu pomocí vlastností
Title
aIcon
vlastností.<Tab Title="Moon Phase" Icon="moon.png">
Přidejte do jiného
Tab
SunrisePage
souboru . Nastavte jehoTitle
východ slunce a jehoIcon
sun.png. Dokončený XAML vypadá takto:<?xml version="1.0" encoding="UTF-8" ?> <Shell x:Class="Astronomy.AppShell" xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Astronomy.Pages" FlyoutIcon="moon.png"> <TabBar> <Tab Title="Moon Phase" Icon="moon.png"> <ShellContent ContentTemplate="{DataTemplate local:MoonPhasePage}" /> </Tab> <Tab Title="Sunrise" Icon="sun.png"> <ShellContent ContentTemplate="{DataTemplate local:SunrisePage}"/> </Tab> </TabBar> </Shell>
Spusťte aplikaci a podívejte se, jak vypadá.
Kombinování stránek karet s informačním rámečkem
Rozhodnete se, že je vhodné mít na stejné stránce karty stránky fáze měsíce a východ slunce. Má také smysl udržovat stránku o stránce oddělené. Takže se rozhodnete informační nabídku přidat zpátky. První kontextová položka zobrazí stránku karty a druhou stránku s informacemi o stránce.
TabBar
Odstraňte všechny podřízené položky obsažené v ní.Na svém místě přidejte do souboru
<FlyoutItem>
. Nastavte jehoTitle
vlastnost na Astronomy a jeho ikonu na moon.png.<FlyoutItem Title="Astronomy" Icon="moon.png"> </FlyoutItem>
V části
<FlyoutItem>
, přidejte<ShellContent>
odkaz naMoonPhasePage
. Nastavte jehoTitle
vlastnost na Fázi Měsíce aIcon
vlastnost na moon.png.<FlyoutItem Title="Astronomy" Icon="moon.png"> <ShellContent Title="Moon Phase" Icon="moon.png" ContentTemplate="{DataTemplate local:MoonPhasePage}"/> </FlyoutItem>
Do stejného
<FlyoutItem>
souboru přidejte další<ShellContent>
odkaz naSunrisePage
. Nastavte jehoTitle
vlastnost na Východ slunce aIcon
vlastnost na sun.png.<FlyoutItem Title="Astronomy" Icon="moon.png"> <ShellContent Title="Moon Phase" Icon="moon.png" ContentTemplate="{DataTemplate local:MoonPhasePage}"/> <ShellContent Title="Sunrise" Icon="sun.png" ContentTemplate="{DataTemplate local:SunrisePage}"/> </FlyoutItem>
Klepnutím na tuto položku informačního rámečku se teď zobrazí stránka karty se dvěma kartami.
Chcete-li vytvořit novou kontextovou položku, která odkazuje na
AboutPage
položku , přidejte novou<FlyoutItem>
. Nastavte jehoTitle
vlastnost na About aIcon
vlastnost na question.png.V této
<FlyoutItem>
části přidejte odkaz<ShellContent>
naAboutPage
.<FlyoutItem Title="About" Icon="question.png"> <ShellContent ContentTemplate="{DataTemplate local:AboutPage}"/> </FlyoutItem>
Spusťte aplikaci znovu. V informačním rámečku by se měly zobrazit dvě položky. První otevře stránku karty, která obsahuje
MoonPhasePage
SunrisePage
Druhá zobrazíAboutPage
sám sebe.
Potřebujete pomoc?
Konečný kód XAML pro AppShell.xaml by měl vypadat jako v tomto příkladu:
<?xml version="1.0" encoding="UTF-8" ?>
<Shell
x:Class="Astronomy.AppShell"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Astronomy.Pages"
FlyoutIcon="moon.png">
<!-- You can add this back in for the header -->
<!--<Shell.FlyoutHeader>
<Grid HeightRequest="100" BackgroundColor="DarkSlateBlue">
<Image Source="moon.png"/>
</Grid>
</Shell.FlyoutHeader>-->
<FlyoutItem Title="Astronomy" Icon="moon.png">
<ShellContent Title="Moon Phase" Icon="moon.png"
ContentTemplate="{DataTemplate local:MoonPhasePage}"/>
<ShellContent Title="Sunrise" Icon="sun.png"
ContentTemplate="{DataTemplate local:SunrisePage}"/>
</FlyoutItem>
<FlyoutItem Title="About" Icon="question.png">
<ShellContent
ContentTemplate="{DataTemplate local:AboutPage}"/>
</FlyoutItem>
</Shell>