Implementare l’esplorazione a comparsa

Completato

L’esplorazione con riquadri a comparsa è un tipo di spostamento in cui una finestra di voci di menu scorre (o esce) dal lato dello schermo del dispositivo. Viene richiamata toccando il cosiddetto menu "hamburger" o un'icona con tre linee orizzontali sovrapposte.

In questa unità si apprende come creare un'app che implementa l’esplorazione con riquadri a comparsa.

Che cos'è l’esplorazione con riquadri a comparsa?

L’esplorazione con riquadri a comparsa visualizza un menu che consente di cambiare rapidamente contesto all'interno dell'applicazione.

Il menu a comparsa è composto da diverse parti, ovvero Header, FlyoutItems, MenuItems e Footer.

L'immagine seguente mostra un esempio visivo delle parti del riquadro a comparsa.

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

Poiché il menu a comparsa non è sempre visibile, può essere usato per cambiare contesto tra parti concettualmente diverse dell'applicazione. Ad esempio, un elemento del riquadro a comparsa può portare a una pagina di immissione di dati (o pagine) e un'altra a una pagina di informazioni.

Esplorazione con riquadri a comparsa in un'app .NET MAUI

La classe FlyoutItem viene utilizzata per implementare l’esplorazione con riquadri a comparsa in .NET MAUI. FlyoutItem fa parte del paradigma di sviluppo delle app Shell fornito da .NET MAUI.

L’esplorazione con un riquadro a comparsa in .NET MAUI si verifica quando si tocca un elemento FlyoutItem. FlyoutItem cambia automaticamente ciò che viene visualizzato nell'app. Puoi specificare cosa viene visualizzato quando un FlyoutItem viene toccato impostando la relativa proprietà ShellContent. Tale proprietà punta a una pagina nell'applicazione.

FlyoutItem deve essere ospitato in una pagina Shell, che funge da pagina principale dell'applicazione. È possibile avere il numero desiderato di FlyoutItem.

L'esempio seguente crea un riquadro a comparsa contenente due elementi del riquadro a comparsa:

<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>

Creare un riquadro a comparsa

Puoi aggiungere uno o più elementi del riquadro a comparsa. Un oggetto FlyoutItem rappresenta ogni elemento del riquadro a comparsa. Ogni oggetto FlyoutItem deve essere un elemento figlio dell'oggetto Shell sottoclasse che funge da oggetto MainPage dell’app.

L'oggetto Shell include operatori di conversione impliciti che consentono di semplificare la gerarchia visiva di Shell. Questa semplificazione è possibile perché un oggetto Shell sottoclassato può contenere solo oggetti FlyoutItem o un oggetto TabBar, che può contenere solo oggetti Tab, che possono contenere solo oggetti ShellContent.

Questi operatori di conversione implicita possono essere usati per rimuovere gli oggetti FlyoutItem e Tab dall'esempio precedente:

<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>

Questo codice genera un riquadro a comparsa con due elementi. CatsPage viene visualizzato per impostazione predefinita all'apertura dell'app. Toccando il secondo viene visualizzato il DogsPage.

A screenshot showing a flyout with two options.

Voci di menu del riquadro a comparsa

Le voci di menu possono essere aggiunte facoltativamente al riquadro a comparsa. Un oggetto MenuItem rappresenta ogni voce di menu. Le voci di menu sono simili ai pulsanti poiché toccarne uno porta a un'azione da eseguire anziché a una pagina da visualizzare.

La posizione degli oggetti MenuItem nel riquadro a comparsa dipende dall'ordine di dichiarazione nella gerarchia visiva di Shell. Pertanto, tutti gli oggetti MenuItem dichiarati prima degli oggetti FlyoutItem verranno visualizzati prima degli oggetti FlyoutItem nel riquadro a comparsa e tutti gli oggetti MenuItem dichiarati dopo gli oggetti FlyoutItem verranno visualizzati dopo gli oggetti FlyoutItem nel riquadro a comparsa.

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

L'intestazione del riquadro a comparsa è il contenuto che viene visualizzato facoltativamente nella parte superiore del riquadro a comparsa. Per definire l'aspetto dell'intestazione, imposta un oggetto con la proprietà associabile Shell.FlyoutHeader:

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

Il piè di pagina del riquadro a comparsa è il contenuto che viene visualizzato facoltativamente nella parte inferiore del riquadro a comparsa. Per definire l'aspetto del piè di pagina, imposta un oggetto con la proprietà associabile Shell.FlyoutFooter:

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