Exercice - Utiliser StackLayout pour créer une interface utilisateur
Dans cet exercice, vous utiliser des conteneurs StackLayout
imbriqués pour organiser les vues dans votre interface utilisateur. La première capture d’écran montre la disposition implémentée par le projet de démarrage, et la deuxième la disposition du projet terminé. Votre tâche consiste à utiliser des conteneurs StackLayout
et LayoutOptions
pour convertir le projet de démarrage en sa version terminée.
Explorer la solution de démarrage
La solution de démarrage contient une application de calculatrice de pourboire entièrement fonctionnelle. Commencez par explorer l’interface utilisateur pour comprendre ce que fait l’application.
À l’aide de Visual Studio, ouvrez la solution de démarrage dans le dossier exercise2/TipCalculator du dépôt que vous avez cloné au début de l’exercice précédent.
Générez et exécutez l’application sur le système d’exploitation de votre choix.
Entrez un nombre dans la zone de texte et utilisez l’application pour voir comment elle fonctionne.
Testez les boutons de montant de pourboire et le curseur.
Fermez l’application une fois que vous avez terminé.
Ouvrez MainPage.xaml. Notez que touts les affichages sont placés dans une seule
VerticalStackLayout
, comme l’illustre le balisage XAML suivant :<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>
Corriger l’interface utilisateur
Maintenant que vous avez vu comment s’exécute l’application, vous pouvez l’améliorer en ajoutant des conteneurs HorizontalStackLayout
. L’objectif est de faire en sorte que l’application ressemble à la capture d’écran au début du labo.
Ouvrez le fichier MainPage.xaml.
Ajoutez
40
unités de remplissage et10
unités d’espacement à laVerticalStackLayout
:<VerticalStackLayout Padding="40" Spacing="10">
Ajoutez une
HorizontalStackLayout
pour regrouper laLabel
indiquant Bill et le champEntry
en dessous. Définissez la propriétéSpacing
sur10
.Définissez la
WidthRequest
de l’élémentLabel
Facture sur100
et la propriétéVerticalOptions
surCenter
. Ces changements garantissent que l’étiquette est alignée verticalement sur le champEntry
.<HorizontalStackLayout Spacing="10"> <Label Text="Bill" WidthRequest="100" VerticalOptions="Center"/> <Entry ... /> </HorizontalStackLayout>
Ajoutez une autre
HorizontalStackLayout
pour regrouper laLabel
indiquant Tip et laLabel
nommée tipOutput. Définissez la propriétéSpacing
sur10
, et la propriétéMargin
sur0,20,0,0
.Définissez la
WidthRequest
de l’élémentLabel
Pourboire sur100
.<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Label Text="Tip" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>
Utilisez une
HorizontalStackLayout
pour regrouper laLabel
indiquant Total et laLabel
nommée totalOutput. Définissez la propriétéSpacing
sur10
.Définissez la
WidthRequest
de l’élémentLabel
Total sur100
.<HorizontalStackLayout Spacing="10"> <Label Text="Total" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>
Ajoutez une autre
HorizontalStackLayout
pour regrouper laLabel
indiquant Tip Percentage et laLabel
nommée tipPercent.Définissez la propriété
VerticalOptions
deHorizontalStackLayout
surEnd
et la propriétéSpacing
sur10
:Définissez la
WidthRequest
de l’élémentLabel
Pourcentage du pourboire sur100
.<HorizontalStackLayout VerticalOptions="End" Spacing="10"> <Label Text="Tip Percentage" WidthRequest="100"/> <Label ... /> </HorizontalStackLayout>
Utilisez une
HorizontalStackLayout
pour regrouper leButton
avec la légende 15%, et leButton
avec la légende 20%.Définissez la propriété
Margin
de cetteStackLayout
sur0,20,0,0
, et la propriétéSpacing
sur10
:<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Button Text="15%" ... /> <Button Text="20%" ... /> </HorizontalStackLayout>
Ajoutez une
HorizontalStackLayout
finale pour regrouper leButton
avec la légende Round Down, et leButton
avec la légende Round Up. Définissez la propriétéMargin
de cetteStackLayout
sur0,20,0,0
, et la propriétéSpacing
sur10
:<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Button ... Text="Round Down" /> <Button ... Text="Round Up" /> </HorizontalStackLayout>
Sur les quatre contrôles de bouton, définissez la propriété
HorizontalOptions
surCenter
, et la propriétéWidthRequest
sur150
. Par exemple :<Button Text="15%" WidthRequest="150" HorizontalOptions="Center" ... />
Le balisage XAML complet de la page de contenu devrait ressembler à ceci :
<?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>
Examiner les résultats
Réexécutez l’application et regardez les différences dans l’interface utilisateur. Vérifiez que les contrôles sont correctement alignés, dimensionnés et espacés.
Vous avez utilisé des conteneurs VerticalStackLayout
et HorizontalStackLayout
pour améliorer l’esthétique d’une interface utilisateur existante. Ces dispositions sont les panneaux de disposition les plus simples, mais sont suffisamment puissantes pour produire une interface utilisateur raisonnable.