![]() |
Neste artigo vamos recordar como criar uma Master Detail Page dinâmica em uma aplicação Xamarin Forms. |
![]() |
Para saber mais sobre Master Detail Page no Xamarin Forms assista os vídeos abaixo sobre o assunto:
Hoje vamos recordar os conceitos básicos e criar uma aplicação Xamarin Forms com uma Master Detail Page dinâmica.
Recursos Usados
Criando o projeto Xamarin Forms
Abra o VS 2017 Community update 15.5 e clique em New Project e a seguir escolha Cross Platform -> Cross Platform App (Xamarin.Forms) e informe o nome XF_MasterDetail.
|
![]() |
Ao criar um projeto Xamarin Forms em uma versão anterior à atualização 15.5, você tinha duas opções para compartilhar o código entre as plataformas:
Pois a partir da versão 15.5 do Visual Studio(lançada em dezembro/2017) a opção Portable Class Library (PCL) foi substituida pela .NET Standard:
![]() |
Marque as opções Android e/ou iOS, marque Xamarin Forms e a seguir marque .NET Standard e clique no botão OK.
Pronto nosso projeto já esta criado.
Definindo as páginas da aplicação
Vamos criar uma pasta Menu no projeto principal e a seguir criar a classe MasterPageItem.cs com o código abaixo:
using System;
namespace XF_MasterDetail.Menu
{
public class MasterPageItem
{
public string Title {get;set;}
public string Icon {get;set;}
public Type TargetType { get; set; }
}
}
|
Vamos criar também uma pasta Views e nesta pasta criar 4 páginas que iremos usar em nossa aplicação :
Além dessas páginas temos também a página principal MainPage.xaml que iremos definir como uma MasterDetailPage.
<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XF_MasterDetail"
x:Class="XF_MasterDetail.MainPage">
<MasterDetailPage.Master>
<ContentPage Title="Menu">
<Grid BackgroundColor="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="200" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid>
<Image Source="bg.png" Aspect="AspectFill" />
<StackLayout Padding="0,20,0,0" HorizontalOptions="CenterAndExpand"
VerticalOptions="CenterAndExpand">
<Image Source="home.png" Aspect="AspectFit" WidthRequest="60" HeightRequest="60" />
<Label Text="Xamarin Mestre Detalhe" TextColor="White" FontSize="Large" />
</StackLayout>
</Grid>
<StackLayout Grid.Row="1" Spacing="15">
<ListView x:Name="paginaMestreList" RowHeight="60" SeparatorVisibility="None"
BackgroundColor="#e8e8e8"
ItemSelected="OnMenuItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<StackLayout VerticalOptions="FillAndExpand" Orientation="Horizontal"
Padding="20,10,0,10" Spacing="20">
<Image Source="{Binding Icon}" WidthRequest="30" HeightRequest="30"
VerticalOptions="Center" />
<Label Text="{Binding Title}" FontSize="Medium" VerticalOptions="Center"
TextColor="Black"/>
</StackLayout>
<BoxView HeightRequest="1" BackgroundColor="Gray"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</Grid>
</ContentPage>
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
<NavigationPage>
</NavigationPage>
</MasterDetailPage.Detail>
</MasterDetailPage>
|
No arquivo
MainPage.xaml.cs temos o código onde os itens do
menu, as imagens a serem exibidas e a respectiva página
detalhe :
using System;
using System.Collections.Generic;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using XF_MasterDetail.Menu;
using XF_MasterDetail.Views;
namespace XF_MasterDetail
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MainPage : MasterDetailPage
{
public List<MasterPageItem> menuList { get; set; }
public MainPage ()
{
InitializeComponent ();
menuList = new List<MasterPageItem>();
// incluindo items de menu e definindo : title ,page and icon
menuList.Add(new MasterPageItem() { Title = "Home", Icon = "home.png", TargetType =
typeof(HomePage) });
menuList.Add(new MasterPageItem() { Title = "Configuração", Icon = "settings.png", TargetType =
typeof(ConfiguracaoPage) });
menuList.Add(new MasterPageItem() { Title = "Ajuda", Icon = "help.png", TargetType =
typeof(AjudaPage) });
menuList.Add(new MasterPageItem() { Title = "LogOut", Icon = "logout.png", TargetType =
typeof(LogoutPage) });
// Configurando o ItemSource fpara o ListView na MainPage.xaml
paginaMestreList.ItemsSource = menuList;
// navegação inicial
Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(HomePage)));
}
// Evento para a seleção de item no menu
// trata a seleção do usuário no ListView
private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e)
{
var item = (MasterPageItem)e.SelectedItem;
Type page = item.TargetType;
Detail = new NavigationPage((Page)Activator.CreateInstance(page));
IsPresented = false;
}
}
}
|
Este exemplo é bem simples e foi feito para recordar o conceito de Master Detail Page.
Pegue o código do projeto compartilhado e as imagens aqui : XF_MasterDetail.zip (sem as referências)
"Disse-lhes, pois, Jesus: Quando levantardes o Filho do
homem, então conhecereis que EU SOU, e que nada faço por
mim mesmo; mas isto falo como meu Pai me ensinou."
João 8:28
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Xamarin Android - Apresentando o controle ProgressBar - Macoratti.net
Xamarin Android - Usando o serviço de Alarme - Macoratti.net
Xamarin.Forms - Usando a view ActivityIndicator - Macoratti.net