Xamarin Forms - Usando Shell para criar Guias - I |
Neste artigo veremos como usar o recurso Shell para criar guias no Xamarin Forms. |
Já apresentei o recurso Shell neste artigo: Xamarin Forms 4.0 - Apresentando o Shell - Macoratti
Vantagens em usar o Shell:
Tá bom ou quer mais ???
Uma aplicação inicial usando Shell pode apresentar a navegação baseada em Tabs ou Flyout.
Inicialmente por padrão é apresentado um Flyout que pode ser removido definindo a propriedade FlyoutBehavior com o valor Disable.
Neste artigo vamos focar na criação de Tabs ou guias de navegação.
recursos usados:
Criando o projeto Xamarin Forms
Vamos criar um novo projeto Xamarin Forms no VS 2019 Community com o nome XF_Shell1.
Você pode ver como criar um projeto no Xamarin Forms neste link: Criar Projeto Xamarin Forms
Vamos criar uma nova página Shell em nosso projeto, e, como ainda não temos um template Shell disponível vamos criar uma página do tipo Content Page (xaml) chamada MainShell.xaml.
A seguir vamos alterar no arquivo MainShell.xaml.cs para a classe herde de Shell:
[XamlCompilation(XamlCompilationOptions.Compile)] public partial class MainShell : Shell { public MainShell() { InitializeComponent(); } } |
No arquivo MainShell.xaml altere o código conforme abaixo:
<?xml version="1.0" encoding="utf-8" ?>
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:pages ="clr-namespace:XF_Shell1;assembly=XF_Shell1"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FlyoutBehavior="Disabled"
x:Class="XF_Shell1.MainShell">
<ShellItem>
<ShellContent>
<pages:MainPage />
</ShellContent>
</ShellItem>
</Shell>
|
Este código vai criar uma aplicação com página única exibindo a MainPage.xaml.
Vamos criar agora duas Content Page :
1- Pagina1.xaml
<?xml version="1.0"
encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="XF_Shell1.Pagina1"> <ContentPage.Content> <StackLayout BackgroundColor="Maroon"> <Image Source="https://image.freepik.com/fotos-gratis/engracado-gato-reto-escoces-encontra-se-de-cabeca-para-baixo-no-tapete_129453-21.jpg" WidthRequest="200" HeightRequest="200"/> <Label Text="Bem-Vindo à pagina 1" TextColor="Beige" FontSize="Large"/> <Button Text="Continuar"/> </StackLayout> </ContentPage.Content> </ContentPage> |
2- Pagina2.xaml
<?xml version="1.0"
encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="XF_Shell1.Pagina2"> <ContentPage.Content> <StackLayout BackgroundColor="Wheat"> <Image Source="https://static1.patasdacasa.com.br/articles/1/41/1/@/1383-verduras-e-legumes-para-cachorro-saiba-article_media_desktop-5.jpg" WidthRequest="200" HeightRequest="200"/> <Label Text="Bem-Vindo à pagina 2" TextColor="Maroon" FontSize="Large"/> <Button Text="Continuar"/> </StackLayout> </ContentPage.Content> </ContentPage> |
A seguir vamos alterar o código da view MainShell.xaml e criar duas guias(TabBar) para exibir cada uma da páginas acima:
<?xml version="1.0" encoding="utf-8" ?>
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:pages ="clr-namespace:XF_Shell1;assembly=XF_Shell1"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FlyoutBehavior="Disabled"
x:Class="XF_Shell1.MainShell">
<!--<ShellItem>
<ShellContent>
<pages:MainPage />
</ShellContent>
</ShellItem>-->
<TabBar>
<Tab Title="Página 1" Icon="pag1.png">
<ShellContent>
<pages:Pagina1 />
</ShellContent>
</Tab>
<Tab Title="Página 2" Icon="pag2.png">
<ShellContent>
<pages:Pagina2 />
</ShellContent>
</Tab>
</TabBar>
</Shell>
|
Ajustando o arquivo App.xaml.cs :
public App() { InitializeComponent(); MainPage = new MainShell(); } |
Executando o projeto teremos o resultado abaixo:
Podemos melhorar ainda mais o nosso código simplificando da seguinte forma:
<?xml version="1.0" encoding="utf-8" ?>
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:pages ="clr-namespace:XF_Shell1;assembly=XF_Shell1"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FlyoutBehavior="Disabled"
x:Class="XF_Shell1.MainShell">
<TabBar>
<pages:Pagina1 IconImageSource="pag1.png" />
<pages:Pagina2 IconImageSource="pag2.png" />
</TabBar>
</Shell>
|
E para ter um melhor desempenho podemos fazer assim:
<?xml version="1.0" encoding="utf-8" ?>
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:pages ="clr-namespace:XF_Shell1;assembly=XF_Shell1"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FlyoutBehavior="Disabled"
x:Class="XF_Shell1.MainShell">
<TabBar> <Tab Title="Página 1" Icon="pag1.png"> <ShellContent ContentTemplate="{DataTemplate pages:Pagina1}" /> </Tab> <Tab Title="Página 2" Icon="pag2.png"> <ShellContent ContentTemplate="{DataTemplate pages:Pagina2}" /> </Tab> </TabBar> </Shell>
|
O resultado final será o mesmo mas o desempenho será muito melhor pois agora estamos criando as páginas sob demanda.
Na próxima parte do artigo veremos como usar o Shell para criar Flyouts.
Pegue o código do projeto compartilhado aqui : XF_Shell1.zip
"Portanto,
cingindo os lombos do vosso entendimento, sede sóbrios, e esperai inteiramente
na graça que se vos ofereceu na revelação de Jesus Cristo;"
1 Pedro 1:13
Referências:
Xamarim - Desenvolvimento Multiplataforma com C# ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Criando sua primeira ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Anatomia da aplicação - Macoratti.net
NET - Apresentando o padrão Model-View-ViewModel - Macoratti.net
Xamarin Forms - MVVM - Macoratti.net
NET - O padrão MVVM (Model-View-ViewModel) revisitado - Macoratti
Xamarin Forms - MVVM - A interface ICommand - Macoratti.net
Padrão de Projeto - Aprendendo o padrão MVVM ... - Macoratti.net