Exercice : Implémenter la navigation par onglet
Dans l’application d’astronomie, vous êtes invité à combiner des onglets avec le menu volant pour faciliter la navigation entre les différentes pages.
La première chose que vous décidez de faire est de supprimer toutes les pages du menu volant et de les ajouter à une TabBar
, afin de voir comment l’application se comporte.
Ajout d’une barre d’onglets
Dans la fenêtre Explorateur de solutions, ouvrez la page AppShell.xaml.
Dans la page de balisage XAML, supprimez tout ce qui se trouve à l’intérieur du
<Shell>
.Créer une
<TabBar>
et un<Tab>
vide.<?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>
Ensuite, ajoutez un
ShellContent
auTab
et définissez son contenu sur leMoonPhasePage
.<TabBar> <Tab> <ShellContent ContentTemplate="{DataTemplate local:MoonPhasePage}" /> </Tab> </TabBar>
Maintenant, attribuez à l’onglet un titre à afficher et une icône en utilisant les propriétés
Title
etIcon
.<Tab Title="Moon Phase" Icon="moon.png">
Ajoutez une autre
Tab
pour laSunrisePage
. Définissez sonTitle
sur lever du soleil et sonIcon
sur sun.png. Le code XAML terminé ressemble à ceci :<?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>
Exécutez l’application pour voir à quoi elle ressemble.
Combiner des pages à onglets avec un menu volant
Vous estimer qu’il est judicieux d’avoir les pages de phase de la lune et de lever du soleil dans la même page à onglets. Il est également judicieux de séparer la page À propos. Vous décidez donc d’ajouter à nouveau le menu volant. Le premier élément de menu volant affiche la page à onglets, et le second la page À propos.
Supprimez la
TabBar
et tous les éléments enfants qu’il contient.À sa place, ajoutez un
<FlyoutItem>
. Définissez sa propriétéTitle
sur Astronomie et son icône sur moon.png.<FlyoutItem Title="Astronomy" Icon="moon.png"> </FlyoutItem>
Dans le
<FlyoutItem>
, ajoutez un<ShellContent>
pointant vers leMoonPhasePage
. Définissez sa propriétéTitle
sur Phase de la lune, et sa propriétéIcon
sur moon.png.<FlyoutItem Title="Astronomy" Icon="moon.png"> <ShellContent Title="Moon Phase" Icon="moon.png" ContentTemplate="{DataTemplate local:MoonPhasePage}"/> </FlyoutItem>
Dans le même
<FlyoutItem>
, ajoutez un autre<ShellContent>
pointant vers laSunrisePage
. Définissez sa propriétéTitle
sur Lever du soleil, et sa propriétéIcon
sur 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>
Un appui sur cet élément de menu volant a désormais pour effet d’afficher une page d’onglets avec deux onglets.
Pour créer un élément de menu volant pointant vers la
AboutPage
, ajoutez un nouveau<FlyoutItem>
. Définissez sa propriétéTitle
sur À propos, et sa propriétéIcon
sur question.png.Dans cet
<FlyoutItem>
, ajoutez un<ShellContent>
pointant vers laAboutPage
.<FlyoutItem Title="About" Icon="question.png"> <ShellContent ContentTemplate="{DataTemplate local:AboutPage}"/> </FlyoutItem>
Réexécutez l’application. Vous devriez voir deux éléments dans le menu volant. Le premier ouvre une page à onglets contenant la
MoonPhasePage
et laSunrisePage
. Le second affiche laAboutPage
.
Besoin d'aide ?
Le code XAML final pour AppShell.xaml devrait ressembler à cet exemple :
<?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>