Esercizio - Usare Grid per compilare un'interfaccia utente
In questo esercizio, si userà un layout Grid
per disporre le visualizzazioni nell'interfaccia utente. Si inizia con un'altra versione del progetto TipCalculator, modificandola per rendere l'interfaccia utente più intuitiva. I pulsanti vengono inoltre spostati nella parte inferiore della pagina. Questa volta si userà un layout Grid
, invece di VerticalStackLayout
e HorizontalStackLayout
. L'immagine seguente mostra l'interfaccia utente iniziale e l'interfaccia utente risultante dall'esecuzione della procedura descritta in questo esercizio:
Aprire la soluzione iniziale
La soluzione iniziale contiene un'app per il calcolo della mancia completamente funzionale.
In Visual Studio aprire la soluzione iniziale nella cartella exercise3/TipCalculator nel repository clonato all'inizio dell'esercizio precedente.
Aprire MainPage.xaml. Si noti che tutte le visualizzazioni sono contenute in un unico pannello
VerticalStackLayout
:<?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>
Creare un layout Grid
Modificare il pannello di layout da
VerticalStackLayout
aGrid
con spaziatura di40
unità.Definire sette righe e due colonne per la
Grid
. Impostare le dimensioniAuto
per tutte le righe eccetto la quarta. La quarta riga deve usareStar
in modo da ottenere tutto lo spazio rimanente disponibile nella griglia. Impostare le dimensioniStar
per entrambe le colonne.<Grid RowDefinitions="Auto, Auto, Auto, *, Auto, Auto, Auto" ColumnDefinitions="*, *" Padding="40"> ... </Grid>
Posizionare le visualizzazioni nelle celle
Aggiungere le impostazioni per
Grid.Row
eGrid.Column
a ognuna delle visualizzazioni per assegnarle alla cella appropriata nel layoutGrid
. Per stabilire dove posizionare ogni visualizzazione, usare lo screenshot seguente:L'esempio seguente mostra come impostare la posizione per Conto
Label
e la visualizzazionebillInput
Entry
:... <Label Text="Bill" Grid.Row="0" Grid.Column="0"/> <Entry x:Name="billInput" Placeholder="Enter Amount" Keyboard="Numeric" Grid.Row="0" Grid.Column="1"/> ...
Allineare Conto
Label
eEntry
impostando la proprietàVerticalOptions
suCenter
Etichetta.Aggiungere un'impostazione di
Grid.ColumnSpan
all'elementoSlider
in modo che si estenda su due colonne:<Slider ... Grid.ColumnSpan="2" ... />
Individuare la vista
Label
con il testo Percentuale di mancia. Impostarla in modo che occupi la posizione in basso a sinistra nel rettangolo:<Label Text="Tip Percentage" VerticalOptions="End" HorizontalOptions="Start" ... />
Individuare la
Label
denominata tipPercent. Impostarla in modo che occupi la posizione in basso a destra nel rettangolo:<Label x:Name="tipPercent" VerticalOptions="End" HorizontalOptions="End" ... />
Impostare la proprietà
Margin
per tutti e quattro i pulsanti su5
.
Il markup XAML (Extensible Application Markup Language) completo per la pagina dovrebbe essere simile al seguente:
<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>
Esaminare i risultati
Eseguire l'applicazione e osservare le differenze nell'interfaccia utente. È stato usato un layout Grid
per migliorare l'estetica di un'interfaccia utente esistente. Il layout Grid
è più efficace di StackLayout
. In particolare, Grid
consente di allineare le visualizzazioni nelle righe molto più facilmente.