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 , TabBarabyste 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
ShellContentdoTabsouboru a nastavte jeho obsah naMoonPhasePagehodnotu .<TabBar> <Tab> <ShellContent ContentTemplate="{DataTemplate local:MoonPhasePage}" /> </Tab> </TabBar>Teď dejte kartě název, který se má zobrazit, a ikonu pomocí vlastností
TitleaIconvlastností.<Tab Title="Moon Phase" Icon="moon.png">Přidejte do jiného
TabSunrisePagesouboru . Nastavte jehoTitlevýchod slunce a jeho sun.pngIcon. 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.
TabBarOdstraňte všechny podřízené položky obsažené v ní.Na svém místě přidejte do souboru
<FlyoutItem>. Nastavte jehoTitlevlastnost na Astronomy a jeho ikonu na moon.png.<FlyoutItem Title="Astronomy" Icon="moon.png"> </FlyoutItem>V části
<FlyoutItem>, přidejte<ShellContent>odkaz naMoonPhasePage. Nastavte jehoTitlevlastnost na Fázi Měsíce aIconvlastnost 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 jehoTitlevlastnost na Východ slunce aIconvlastnost 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
AboutPagepoložku , přidejte novou<FlyoutItem>. Nastavte jehoTitlevlastnost na About aIconvlastnost 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
MoonPhasePageSunrisePageDruhá zobrazíAboutPagesá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>