Exercício - Use o Grid para criar uma interface de usuário
Neste exercício, você usa a Grid
para organizar os modos de exibição na interface do usuário (UI). Você começa com outra versão do projeto TipCalculator e ajusta-o para tornar a interface do usuário mais intuitiva. Você também move os botões para a parte inferior da página. Desta vez, você usa um Grid
layout em vez de usar VerticalStackLayout
e HorizontalStackLayout
. A imagem a seguir mostra a interface do usuário inicial e a interface do usuário que resulta de seguir as etapas deste exercício:
Abra a solução inicial
A solução inicial contém um aplicativo de calculadora de dicas totalmente funcional.
Usando o Visual Studio, abra a solução inicial na pasta exercise3/TipCalculator no repositório que você clonou no início do exercício anterior.
Abra MainPage.xaml. Observe que todas as visualizações são exibidas usando um
VerticalStackLayout
painel:<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:TipCalculator" x:Class="TipCalculator.MainPage"> <VerticalStackLayout> <Label Text="Bill" /> <Entry x:Name="billInput" Placeholder="Enter Amount" Keyboard="Numeric" /> <Label Text="Tip" /> <Label x:Name="tipOutput" Text="0.00" /> <Label Text="Total" /> <Label x:Name="totalOutput" Text="0.00" /> <Label Text="Tip Percentage" /> <Label x:Name="tipPercent" Text="15%" /> <Slider x:Name="tipPercentSlider" Minimum="0" Maximum="100" Value="15" /> <Button Text="15%" Clicked="OnNormalTip" /> <Button Text="20%" Clicked="OnGenerousTip" /> <Button x:Name="roundDown" Text="Round Down" /> <Button x:Name="roundUp" Text="Round Up" /> </VerticalStackLayout> </ContentPage>
Criar um layout de grade
Altere o painel de layout de
VerticalStackLayout
para comGrid
preenchimento de40
unidades.Defina sete linhas e duas colunas para o
Grid
. Faça com que todas as linhasAuto
sejam dimensionadas, exceto a quarta linha. A quarta linha deve ser usadaStar
para obter todo o espaço restante disponível na grade. UseStar
o dimensionamento para ambas as colunas.<Grid RowDefinitions="Auto, Auto, Auto, *, Auto, Auto, Auto" ColumnDefinitions="*, *" Padding="40"> ... </Grid>
Posicionar as vistas nas células
Adicione configurações para
Grid.Row
eGrid.Column
para cada um dos modos de exibição para atribuí-los à célula apropriada noGrid
. Use a captura de tela a seguir para ajudá-lo a determinar onde cada exibição deve ser colocada:O exemplo a seguir mostra como definir a posição para o Bill
Label
e obillInput
Entry
modo de exibição:... <Label Text="Bill" Grid.Row="0" Grid.Column="0"/> <Entry x:Name="billInput" Placeholder="Enter Amount" Keyboard="Numeric" Grid.Row="0" Grid.Column="1"/> ...
Alinhe a fatura
Label
eEntry
defina aVerticalOptions
propriedade comoCenter
no rótulo.Adicione uma configuração para
Grid.ColumnSpan
oSlider
para que ele se estenda por duas colunas:<Slider ... Grid.ColumnSpan="2" ... />
Localize o
Label
com o texto Porcentagem de dica. Configure-o de modo a que ocupe a posição inferior esquerda no seu retângulo:<Label Text="Tip Percentage" VerticalOptions="End" HorizontalOptions="Start" ... />
Localize o
Label
tipPercent nomeado. Configure-o de modo que ocupe a posição inferior direita em seu retângulo:<Label x:Name="tipPercent" VerticalOptions="End" HorizontalOptions="End" ... />
Defina a
Margin
propriedade para todos os quatro botões como5
.
A marcação XAML (Extensible Application Markup Language) completa para a página deve ter esta aparência:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TipCalculator"
x:Class="TipCalculator.MainPage">
<Grid RowDefinitions="Auto, Auto, Auto, *, Auto, Auto, Auto"
ColumnDefinitions="*, *"
Padding="40">
<Label Text="Bill" VerticalOptions="Center" Grid.Row="0" Grid.Column="0"/>
<Entry x:Name="billInput" Placeholder="Enter Amount" Keyboard="Numeric" Grid.Row="0" Grid.Column="1"/>
<Label Text="Tip" Grid.Row="1" Grid.Column="0"/>
<Label x:Name="tipOutput" Text="0.00" Grid.Row="1" Grid.Column="1"/>
<Label Text="Total" Grid.Row="2" Grid.Column="0"/>
<Label x:Name="totalOutput" Text="0.00" Grid.Row="2" Grid.Column="1"/>
<Label Text="Tip Percentage" VerticalOptions="End" HorizontalOptions="Start" Grid.Row="3" Grid.Column="0"/>
<Label x:Name="tipPercent" Text="15%" VerticalOptions="End" HorizontalOptions="End" Grid.Row="3" Grid.Column="1"/>
<Slider x:Name="tipPercentSlider" Minimum="0" Maximum="100" Value="15" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2"/>
<Button Text="15%" Clicked="OnNormalTip" Margin="5" Grid.Row="5" Grid.Column="0"/>
<Button Text="20%" Clicked="OnGenerousTip" Margin="5" Grid.Row="5" Grid.Column="1"/>
<Button x:Name="roundDown" Margin="5" Text="Round Down" Grid.Row="6" Grid.Column="0"/>
<Button x:Name="roundUp" Margin="5" Text="Round Up" Grid.Row="6" Grid.Column="1"/>
</Grid>
</ContentPage>
Examinar os resultados
Execute o aplicativo e observe as diferenças na interface do usuário. Você usou um Grid
para melhorar a estética de uma interface do usuário existente. Grid
é mais potente do que StackLayout
. Em particular, Grid
torna muito mais fácil alinhar as vistas entre linhas.