Implémenter la navigation par menu volant

Effectué

La navigation par menu volant est un type de navigation où une fenêtre d’éléments de menu glisse (ou s’envole) à partir du côté de l’écran de l’appareil. Elle est appelée en appuyant sur ce qu’on appelle un menu « Hamburger » ou une icône comportant trois lignes horizontales empilées les unes sur les autres.

Dans cette unité, vous apprenez à générer une application qui implémente la navigation par menu volant.

Qu’est-ce que la navigation par menu volant ?

La navigation par menu volant affiche un menu qui fournit un moyen rapide de changer de contexte au sein de votre application.

Le menu volant est composé de plusieurs parties : Header, FlyoutItems, MenuItems et Footer.

L’image suivante montre un exemple visuel des parties d’un menu volant.

A screenshot of a flyout menu with each portion of the flyout annotated.

Étant donné que le menu volant n’est pas toujours visible, il peut être utilisé pour changer de contexte entre des parties de votre application qui diffèrent sur le plan conceptuel. Par exemple, un élément de menu volant peut conduire à une page (ou plusieurs pages) d’entrée de données, et un autre à une page À propos.

Navigation par menu volant dans une application .NET MAUI

Vous utilisez la classe FlyoutItem pour implémenter la navigation par menu volant dans .NET MAUI. FlyoutItem fait partie du paradigme de développement d’applications Shell fourni par .NET MAUI.

La navigation avec un menu volant dans .NET MAUI se produit lorsqu’un utilisateur appuie sur un élément FlyoutItem. FlyoutItem fait automatiquement basculer ce qui est affiché dans votre application. Vous spécifiez ce qui s’affiche lorsqu’un utilisateur appuie sur un élément FlyoutItem en définissant sa propriété ShellContent. Cette propriété pointe vers une page de votre application.

FlyoutItem doit être hébergé dans une page Shell, qui sert de page principale de votre application. Et vous pouvez en avoir autant d’éléments FlyoutItem que vous le souhaitez.

L’exemple suivant crée un menu volant contenant deux éléments de menu volant :

<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
       xmlns:controls="clr-namespace:Xaminals.Controls"
       xmlns:views="clr-namespace:Xaminals.Views"
       x:Class="Xaminals.AppShell">
    <FlyoutItem Title="Cats"
                Icon="cat.png">
       <Tab>
           <ShellContent ContentTemplate="{DataTemplate views:CatsPage}" />
       </Tab>
    </FlyoutItem>
    <FlyoutItem Title="Dogs"
                Icon="dog.png">
       <Tab>
           <ShellContent ContentTemplate="{DataTemplate views:DogsPage}" />
       </Tab>
    </FlyoutItem>
</Shell>

Créer un menu volant

Un ou plusieurs éléments peuvent être ajoutés au menu volant. Un objet FlyoutItem représente chaque élément de menu volant. Chaque objet FlyoutItem doit être un enfant de l’objet Shell sous-classé qui fait office d’élément MainPage de votre application.

L’objet Shell a des opérateurs de conversion implicite qui permettent de simplifier la hiérarchie visuelle du shell. Cette simplification est possible, car un objet Shell sous-classé ne peut contenir que des objets FlyoutItem ou un objet TabBar, qui ne peut contenir que des objets Tab, qui ne peuvent contenir que des objets ShellContent.

Ces opérateurs de conversion implicite peuvent permettre de supprimer les objets FlyoutItem et Tab de l’exemple précédent :

<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
       xmlns:controls="clr-namespace:Xaminals.Controls"
       xmlns:views="clr-namespace:Xaminals.Views"
       x:Class="Xaminals.AppShell">
   <ShellContent Title="Cats"
                 Icon="cat.png"
                 ContentTemplate="{DataTemplate views:CatsPage}" />
   <ShellContent Title="Dogs"
                 Icon="dog.png"
                 ContentTemplate="{DataTemplate views:DogsPage}" />
</Shell>

Ce code génère un menu volant avec deux éléments. CatsPage s’affiche par défaut lorsque l’application s’ouvre. Appuyer sur le deuxième affiche l’élément DogsPage.

A screenshot showing a flyout with two options.

Éléments de menu volant

Des éléments de menu peuvent éventuellement être ajoutés au menu volant. Un objet MenuItem représente chaque élément de menu. Les éléments de menu sont similaires aux boutons dans la mesure où le fait d’appuyer sur l’un d’eux entraîne l’exécution d’une action plutôt que l’affichage d’une page.

La position des objets MenuItem du menu volant dépend de leur ordre de déclaration dans la hiérarchie visuelle Shell. Par conséquent, tous les objets MenuItem déclarés avant les objets FlyoutItem apparaissent avant les objets FlyoutItem dans le menu volant, et tous les objets MenuItem déclarés après les objets FlyoutItem apparaissent après les objets FlyoutItem dans le menu volant.

<Shell ...>
    ...            
    <MenuItem Text="Help"
              IconImageSource="help.png"
              Command="{Binding HelpCommand}"
              CommandParameter="https://zcusa.951200.xyz/dotnet/maui/fundamentals/shell" />    
</Shell>

L’en-tête du menu volant est le contenu qui apparaît éventuellement en haut du menu volant. Vous définissez l’apparence de l’en-tête en définissant un objet avec la propriété Shell.FlyoutHeader pouvant être liée :

<Shell ...>
    <Shell.FlyoutHeader>
        <Grid>
            <Image Source="header-image.png" />
        </Grid>
    </Shell.FlyoutHeader>
</Shell>

Le pied de page du menu volant est le contenu qui apparaît éventuellement en bas du menu volant. Vous définissez l’apparence du pied de page en définissant un objet avec la propriété Shell.FlyoutFooter pouvant être liée :

<Shell ...>
    <Shell.FlyoutFooter>
        <Grid>
            <Image Source="footer-image.png" />
        </Grid>
    </Shell.FlyoutFooter>
</Shell>