Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A experiência de navegação fornecida pelo .NET Multi-platform App UI Shell (.NET MAUI) baseia-se em flyouts e separadores. O nível superior de navegação numa aplicação Shell pode ser um flyout ou uma barra de separadores inferior, dependendo dos requisitos de navegação da aplicação. Quando a experiência de navegação de uma aplicação começa com abas inferiores, o filho do objeto subclassificado Shell deve ser um objeto TabBar, que representa a barra de abas inferior.
Um objeto TabBar pode conter um ou mais objetos Tab, com cada objeto Tab representando uma aba na barra inferior de guias. Cada Tab objeto pode conter um ou mais ShellContent objetos, com cada ShellContent objeto a exibir um único ContentPage. Quando há mais de um objeto ShellContent presente num objeto Tab, os objetos ContentPage podem ser navegados através de abas superiores. Dentro de um separador, pode navegar até outros ContentPage objetos conhecidos como páginas de detalhe.
Importante
O TabBar tipo desativa o flyout.
Sugestão
Os separadores podem ser exibidos com um flyout ao adicionar múltiplos objetos ShellContent a um objeto FlyoutItem ou objetos Tab. Para mais informações, consulte o flyout do .NET MAUI Shell.
Página única
Uma aplicação Shell de página única pode ser criada adicionando um Tab objeto a um TabBar objeto. Dentro do Tab objeto, um ShellContent objeto deve ser definido como um ContentPage objeto:
<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:Xaminals.Views"
x:Class="Xaminals.AppShell">
<TabBar>
<Tab>
<ShellContent ContentTemplate="{DataTemplate views:CatsPage}" />
</Tab>
</TabBar>
</Shell>
Este exemplo resulta na seguinte aplicação de página única:
O Shell possui operadores de conversão implícita que permitem simplificar a hierarquia visual do Shell sem introduzir mais vistas na árvore visual. Esta simplificação é possível porque um objeto de Shell subclasse só pode conter FlyoutItem objetos ou um TabBar objeto, que só pode conter Tab objetos, que só pode conter ShellContent objetos. Estes operadores de conversão implícita podem ser usados para remover os Tab objetos do exemplo anterior:
<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:Xaminals.Views"
x:Class="Xaminals.AppShell">
<Tab>
<ShellContent ContentTemplate="{DataTemplate views:CatsPage}" />
</Tab>
</Shell>
Esta conversão implícita envolve automaticamente o ShellContent objeto num Tab objeto, que está envolto num TabBar objeto.
Importante
Numa aplicação Shell, as páginas são criadas a pedido em resposta à navegação. Isto é conseguido usando a DataTemplate extensão de marcação para definir a ContentTemplate propriedade de cada ShellContent objeto para um ContentPage objeto.
Separadores inferiores
Se houver vários Tab objetos num único TabBar objeto, os Tab objetos são renderizados como abas inferiores.
<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:Xaminals.Views"
x:Class="Xaminals.AppShell">
<TabBar>
<Tab Title="Cats"
Icon="cat.png">
<ShellContent ContentTemplate="{DataTemplate views:CatsPage}" />
</Tab>
<Tab Title="Dogs"
Icon="dog.png">
<ShellContent ContentTemplate="{DataTemplate views:DogsPage}" />
</Tab>
</TabBar>
</Shell>
A Title propriedade, do tipo string, define o título do separador. A Icon propriedade, do tipo ImageSource, define o ícone de tabulação:
Quando existem mais de cinco separadores num TabBar, aparece um separador Mais , que pode ser usado para aceder aos outros separadores:
Além disso, os operadores de conversão implícita do Shell podem ser usados para remover os ShellContent objetos e Tab do exemplo anterior:
<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:Xaminals.Views"
x:Class="Xaminals.AppShell">
<TabBar>
<ShellContent Title="Cats"
Icon="cat.png"
ContentTemplate="{DataTemplate views:CatsPage}" />
<ShellContent Title="Dogs"
Icon="dog.png"
ContentTemplate="{DataTemplate views:DogsPage}" />
</TabBar>
</Shell>
Esta conversão implícita envolve automaticamente cada ShellContent objeto num Tab objeto.
Importante
Numa aplicação Shell, as páginas são criadas a pedido em resposta à navegação. Atinge-se isto ao usar a extensão de marcação DataTemplate para definir a propriedade ContentTemplate de cada objeto ShellContent como um objeto ContentPage.
Abas inferiores e superiores
Quando há mais do que um ShellContent objeto presente num Tab objeto, uma barra de separador superior é adicionada ao separador inferior, através da qual os ContentPage objetos são navegáveis:
<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:Xaminals.Views"
x:Class="Xaminals.AppShell">
<TabBar>
<Tab Title="Domestic"
Icon="paw.png">
<ShellContent Title="Cats"
ContentTemplate="{DataTemplate views:CatsPage}" />
<ShellContent Title="Dogs"
ContentTemplate="{DataTemplate views:DogsPage}" />
</Tab>
<Tab Title="Monkeys"
Icon="monkey.png">
<ShellContent ContentTemplate="{DataTemplate views:MonkeysPage}" />
</Tab>
</TabBar>
</Shell>
Este código resulta no layout mostrado na seguinte captura de ecrã:
Além disso, os operadores de conversão implícita do Shell podem ser usados para remover o segundo Tab objeto do exemplo anterior:
<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:Xaminals.Views"
x:Class="Xaminals.AppShell">
<TabBar>
<Tab Title="Domestic"
Icon="paw.png">
<ShellContent Title="Cats"
Icon="cat.png"
ContentTemplate="{DataTemplate views:CatsPage}" />
<ShellContent Title="Dogs"
Icon="dog.png"
ContentTemplate="{DataTemplate views:DogsPage}" />
</Tab>
<ShellContent Title="Monkeys"
Icon="monkey.png"
ContentTemplate="{DataTemplate views:MonkeysPage}" />
</TabBar>
</Shell>
Esta conversão implícita envolve automaticamente o terceiro ShellContent objeto num Tab objeto.
Aparência das abas
A Shell classe define as seguintes propriedades associadas que controlam o aspeto das tabulações:
-
TabBarBackgroundColor, do tipo Color, que define a cor de fundo da barra de abas. Se a propriedade estiver desdefinida, oBackgroundColorvalor da propriedade é usado. -
TabBarDisabledColor, do tipo Color, que define a cor desativada para a barra de separador. Se a propriedade estiver desdefinida, oDisabledColorvalor da propriedade é usado. -
TabBarForegroundColor, do tipo Color, que define a cor em primeiro plano para a barra de separador. Se a propriedade estiver desdefinida, oForegroundColorvalor da propriedade é usado. -
TabBarTitleColor, do tipo Color, que define a cor do título para a barra de separador. Se a propriedade estiver desdefinida, oTitleColorvalor da propriedade é usado. -
TabBarUnselectedColor, do tipo Color, que define a cor não selecionada para a barra de abas. Se a propriedade estiver desdefinida, oUnselectedColorvalor da propriedade é usado.
Todas estas propriedades são suportadas por BindableProperty objetos, o que significa que as propriedades podem ser alvo de ligações de dados e estilizadas.
As três propriedades que mais influenciam a cor de um separador são TabBarForegroundColor, TabBarTitleColor, e TabBarUnselectedColor:
- Se apenas a
TabBarTitleColorpropriedade estiver definida, o seu valor será usado para colorir o título e o ícone do separador selecionado. SeTabBarTitleColornão estiver definida, então a cor do título corresponderá ao valor daTabBarForegroundColorpropriedade. - Se a
TabBarForegroundColorpropriedade estiver definida e aTabBarUnselectedColorpropriedade não estiver definida, então o valor daTabBarForegroundColorpropriedade será usado para colorir o título e o ícone do separador selecionado. - Se apenas a
TabBarUnselectedColorpropriedade estiver definida, o seu valor será usado para colorir o título e o ícone do separador não selecionado.
Por exemplo:
- Quando a
TabBarTitleColorpropriedade está definida paraGreeno título e o ícone do separador selecionado são verdes, e separadores não selecionados coincidem com as cores do sistema. - Quando a
TabBarForegroundColorpropriedade está definida paraBlueo título, o ícone do separador selecionado é azul, e os separadores não selecionados coincidem com as cores do sistema. - Quando a
TabBarTitleColorpropriedade está definida paraGreene aTabBarForegroundColorpropriedade está definida paraBlue, o título é verde e o ícone é azul para o separador selecionado, e os separadores não selecionados coincidem com as cores do sistema. - Quando a
TabBarTitleColorpropriedade está definida paraGreene aShell.ForegroundColorpropriedade está definida paraBlue, o título é verde e o ícone é azul para o separador selecionado, e os separadores não selecionados coincidem com as cores do sistema. Isto ocorre porque o valor daShell.ForegroundColorpropriedade propaga-se para aTabBarForegroundColorpropriedade. - Quando a
TabBarTitleColorpropriedade está definida paraGreen, aTabBarForegroundColorpropriedade é definida paraBlue, e aTabBarUnselectedColorpropriedade está definida paraRed, o título é verde e o ícone é azul para o separador selecionado, e os títulos e ícones de separadores não selecionados são vermelhos.
O exemplo seguinte mostra um estilo XAML que define diferentes propriedades de cor na barra de separadores:
<Style TargetType="TabBar">
<Setter Property="Shell.TabBarBackgroundColor"
Value="CornflowerBlue" />
<Setter Property="Shell.TabBarTitleColor"
Value="Black" />
<Setter Property="Shell.TabBarUnselectedColor"
Value="AntiqueWhite" />
</Style>
Além disso, as tabulações também podem ser estilizadas usando Folhas de Estilo em Cascata (CSS). Para obter mais informações, consulte Propriedades específicas do .NET MAUI Shell.
Seleção de aba
Quando uma aplicação Shell que usa uma barra de separadores é executada pela primeira vez, a Shell.CurrentItem propriedade é definida para o primeiro Tab objeto do objeto subclassado Shell . No entanto, a propriedade pode ser definida para outra Tab, como mostrado no seguinte exemplo:
<Shell ...
CurrentItem="{x:Reference dogsItem}">
<TabBar>
<ShellContent Title="Cats"
Icon="cat.png"
ContentTemplate="{DataTemplate views:CatsPage}" />
<ShellContent x:Name="dogsItem"
Title="Dogs"
Icon="dog.png"
ContentTemplate="{DataTemplate views:DogsPage}" />
</TabBar>
</Shell>
Este exemplo define a CurrentItem propriedade para o ShellContent objeto chamado dogsItem, o que resulta na sua seleção e exibição. Neste exemplo, é usada uma conversão implícita para envolver cada ShellContent objeto num Tab objeto.
O código C# equivalente, dado um ShellContent objeto chamado dogsItem, é:
CurrentItem = dogsItem;
Neste exemplo, a CurrentItem propriedade está definida na classe subclassada Shell . Alternativamente, a CurrentItem propriedade pode ser definida em qualquer classe através da Shell.Current propriedade estática:
Shell.Current.CurrentItem = dogsItem;
Visibilidade de TabBar e Tab
A barra de abas e as abas são visíveis nas aplicações do Shell por defeito. No entanto, a barra de tabulação pode ser ocultada definindo a Shell.TabBarIsVisible propriedade associada para false.
Embora esta propriedade possa ser definida num objeto subclassado Shell, é geralmente definida em qualquer objeto ShellContent ou ContentPage que queira tornar a barra de separadores invisível:
<TabBar>
<Tab Title="Domestic"
Icon="paw.png">
<ShellContent Title="Cats"
ContentTemplate="{DataTemplate views:CatsPage}" />
<ShellContent Shell.TabBarIsVisible="false"
Title="Dogs"
ContentTemplate="{DataTemplate views:DogsPage}" />
</Tab>
<Tab Title="Monkeys"
Icon="monkey.png">
<ShellContent ContentTemplate="{DataTemplate views:MonkeysPage}" />
</Tab>
</TabBar>
Neste exemplo, a barra de separadores fica oculta quando o separador superior Cães está selecionado.
Além disso, Tab os objetos podem ser ocultos ao definir a IsVisible propriedade bindable como false:
<TabBar>
<ShellContent Title="Cats"
Icon="cat.png"
ContentTemplate="{DataTemplate views:CatsPage}" />
<ShellContent Title="Dogs"
Icon="dog.png"
ContentTemplate="{DataTemplate views:DogsPage}"
IsVisible="False" />
<ShellContent Title="Monkeys"
Icon="monkey.png"
ContentTemplate="{DataTemplate views:MonkeysPage}" />
</TabBar>
Neste exemplo, o segundo separador está oculto.
Procurar o exemplo