Exercício: Implementar a navegação por separadores

Concluído

No aplicativo de astronomia, você é solicitado a combinar guias com o submenu para ajudar na navegação entre as diferentes páginas.

A primeira coisa que você decide fazer é remover todas as páginas do submenu e adicioná-las a um TabBar, para que você possa ver como o aplicativo se sente.

Adicionar uma TabBar

  1. Na janela Gerenciador de Soluções, abra a página AppShell.xaml .

  2. Na página de marcação XAML, exclua tudo dentro <Shell>do .

  3. Crie um <TabBar> e um vazio <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>
    
  4. Em seguida, adicione um ShellContent ao Tab e defina seu conteúdo como .MoonPhasePage

    <TabBar>
        <Tab>
            <ShellContent ContentTemplate="{DataTemplate local:MoonPhasePage}" />
        </Tab>
    </TabBar>
    
  5. Agora, dê à guia um título a ser exibido e um ícone usando as Title propriedades e Icon .

    <Tab Title="Moon Phase" Icon="moon.png">
    
  6. Adicione outro Tab para o SunrisePage. Defina o seu Title nascer do sol e o seu Icon para sun.png. O XAML concluído tem esta aparência:

    <?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>
    
  7. Execute o aplicativo para ver sua aparência.

    Captura de ecrã da aplicação em execução com dois separadores em vez de utilizar o menu submenu.

Combinar páginas de tabulação com um submenu

Você decide que faz sentido ter as páginas da fase da lua e do nascer do sol na mesma página de guia. Também faz sentido manter a página sobre separada. Assim, você decide adicionar o submenu novamente. O primeiro item de submenu exibe a página da guia e o segundo a página sobre.

  1. Exclua o TabBar e todos os itens filho contidos nele.

  2. Em seu lugar, adicione um <FlyoutItem>arquivo . Defina sua Title propriedade como Astronomia e seu ícone como moon.png.

    <FlyoutItem Title="Astronomy" Icon="moon.png">
    
    </FlyoutItem>
    
  3. Dentro do <FlyoutItem>, adicione um <ShellContent> que aponte para o MoonPhasePage. Defina sua Title propriedade como Moon Phase e Icon a propriedade como moon.png.

    <FlyoutItem Title="Astronomy" Icon="moon.png">
        <ShellContent Title="Moon Phase" Icon="moon.png"
            ContentTemplate="{DataTemplate local:MoonPhasePage}"/>
    </FlyoutItem>
    
  4. Dentro do mesmo <FlyoutItem>, adicione outro <ShellContent> para apontar para o SunrisePage. Defina a sua Title propriedade para Sunrisepropriedade para Icon.

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

    Agora, tocar neste item de submenu exibe uma página de guia com duas guias.

  5. Para criar um novo item de submenu que aponte para o AboutPage, adicione um novo <FlyoutItem>. Defina sua Title propriedade como About e Icon property como question.png.

  6. Dentro disso <FlyoutItem>, adicione um <ShellContent> que aponta para o AboutPage.

    <FlyoutItem Title="About" Icon="question.png">
        <ShellContent
            ContentTemplate="{DataTemplate local:AboutPage}"/>
    </FlyoutItem>
    
  7. Execute o aplicativo novamente. Você deve ver dois itens no submenu. O primeiro abre uma página de separador que contém o MoonPhasePage e SunrisePage. O segundo exibe o AboutPage por si só.

Precisa de ajuda?

O código XAML final para AppShell.xaml deve ser semelhante a este exemplo:

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