Esercizio - Usare StackLayout per creare un'interfaccia utente
In questo esercizio si useranno contenitori StackLayout
annidati per disporre le visualizzazioni nell'interfaccia utente. Il primo screenshot mostra il layout implementato dal progetto iniziale, mentre il secondo mostra il layout per il progetto completato. L'obiettivo dell'esercizio consiste nell'usare contenitori StackLayout
e LayoutOptions
per trasformare il progetto iniziale nella versione completata.
Esplorare la soluzione iniziale
La soluzione iniziale contiene un'app per il calcolo della mancia completamente funzionale. Per iniziare, esplorare l'interfaccia utente per comprendere il funzionamento dell'app.
In Visual Studio aprire la soluzione iniziale nella cartella exercise2/TipCalculator nel repository clonato all'inizio dell'esercizio precedente.
Compilare ed eseguire l'app nel sistema operativo preferito.
Immettere un numero nella casella di testo e usare l'app per verificarne il funzionamento.
Fare pratica con i pulsanti dell'importo della mancia e con il dispositivo di scorrimento.
Al termine, chiudere l'app.
Aprire MainPage.xaml. Si noti che tutte le visualizzazioni sono inserite in un unico contenitore
VerticalStackLayout
, come illustrato dal markup XAML 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"> <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>
Correggere l'interfaccia utente
Dopo aver visto l'app in esecuzione, è possibile migliorarne l'aspetto mediante l'aggiunta di contenitori HorizontalStackLayout
. L'obiettivo è rendere l'app simile allo screenshot mostrato all'inizio del lab.
Aprire il file MainPage.xaml.
Aggiungere
40
unità di spaziatura interna e10
unità di spaziatura al contenitoreVerticalStackLayout
:<VerticalStackLayout Padding="40" Spacing="10">
Aggiungere un contenitore
HorizontalStackLayout
per raggruppare laLabel
denominata Bill con il campoEntry
sotto di essa. Impostare la proprietàSpacing
su10
.Impostare la proprietà
WidthRequest
del ContoLabel
su100
e la proprietàVerticalOptions
suCenter
. In questo modo l'etichetta verrà allineata in verticale al campoEntry
.<HorizontalStackLayout Spacing="10"> <Label Text="Bill" WidthRequest="100" VerticalOptions="Center"/> <Entry ... /> </HorizontalStackLayout>
Aggiungere un altro contenitore
HorizontalStackLayout
per raggruppare laLabel
denominata Tip con laLabel
denominata tipOutput. Impostare la proprietàSpacing
su10
e la proprietàMargin
su0,20,0,0
.Impostare la proprietà
WidthRequest
della ManciaLabel
su100
<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Label Text="Tip" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>
Usare un contenitore
HorizontalStackLayout
per raggruppare laLabel
denominata Total con laLabel
denominata totalOutput. Impostare la proprietàSpacing
su10
.Impostare la proprietà
WidthRequest
del TotaleLabel
su100
<HorizontalStackLayout Spacing="10"> <Label Text="Total" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>
Aggiungere un altro contenitore
HorizontalStackLayout
per raggruppare laLabel
denominata Percentage con laLabel
denominata tipPercent.Impostare la proprietà
VerticalOptions
di questo contenitoreHorizontalStackLayout
suEnd
e la proprietàSpacing
su10
:Impostare la proprietà
WidthRequest
della Percentuale manciaLabel
su100
<HorizontalStackLayout VerticalOptions="End" Spacing="10"> <Label Text="Tip Percentage" WidthRequest="100"/> <Label ... /> </HorizontalStackLayout>
Usare un contenitore
HorizontalStackLayout
per raggruppare ilButton
con la didascalia 15% e ilButton
con la didascalia 20%.Impostare la proprietà
Margin
di questo contenitoreStackLayout
su0,20,0,0
e la proprietàSpacing
su10
:<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Button Text="15%" ... /> <Button Text="20%" ... /> </HorizontalStackLayout>
Aggiungere un contenitore
HorizontalStackLayout
finale per raggruppare ilButton
con la didascalia Round Down e ilButton
con la didascalia Round Up. Impostare la proprietàMargin
di questo contenitoreStackLayout
su0,20,0,0
e la proprietàSpacing
su10
:<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Button ... Text="Round Down" /> <Button ... Text="Round Up" /> </HorizontalStackLayout>
In tutti e quattro i pulsanti impostare la proprietà
HorizontalOptions
suCenter
e la proprietàWidthRequest
su150
. Ad esempio:<Button Text="15%" WidthRequest="150" HorizontalOptions="Center" ... />
Il markup XAML (Extensible Application Markup Language) completo per la pagina del contenuto dovrebbe essere simile al seguente:
<?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 Padding="40" Spacing="10">
<HorizontalStackLayout Spacing="10">
<Label Text="Bill" WidthRequest="100" VerticalOptions="Center" />
<Entry x:Name="billInput" Placeholder="Enter Amount" Keyboard="Numeric" />
</HorizontalStackLayout>
<HorizontalStackLayout Margin="0,20,0,0" Spacing="10">
<Label Text="Tip" WidthRequest="100" />
<Label x:Name="tipOutput" Text="0.00" />
</HorizontalStackLayout>
<HorizontalStackLayout Spacing="10">
<Label Text="Total" WidthRequest="100"/>
<Label x:Name="totalOutput" Text="0.00" />
</HorizontalStackLayout>
<HorizontalStackLayout VerticalOptions="End" Spacing="10">
<Label Text="Tip Percentage" WidthRequest="100"/>
<Label x:Name="tipPercent" Text="15%" />
</HorizontalStackLayout>
<Slider x:Name="tipPercentSlider" Minimum="0" Maximum="100" Value="15" />
<HorizontalStackLayout Margin="0,20,0,0" Spacing="10">
<Button Text="15%" Clicked="OnNormalTip" WidthRequest="150" HorizontalOptions="Center"/>
<Button Text="20%" Clicked="OnGenerousTip" WidthRequest="150" HorizontalOptions="Center"/>
</HorizontalStackLayout>
<HorizontalStackLayout Margin="0,20,0,0" Spacing="10">
<Button x:Name="roundDown" Text="Round Down" WidthRequest="150" HorizontalOptions="Center"/>
<Button x:Name="roundUp" Text="Round Up" WidthRequest="150" HorizontalOptions="Center"/>
</HorizontalStackLayout>
</VerticalStackLayout>
</ContentPage>
Esaminare i risultati
Eseguire nuovamente l'app e osservare le differenze nell'interfaccia utente. Verificare che i controlli siano allineati correttamente, con le dimensioni e la spaziatura corrette.
Sono stati usati i contenitori VerticalStackLayout
e HorizontalStackLayout
per migliorare l'estetica di un'interfaccia utente esistente. Questi layout sono pannelli di layout semplicissimi ma comunque in grado di produrre un'interfaccia utente sensata.