Ćwiczenie — tworzenie interfejsu użytkownika przy użyciu obiektu StackLayout
W tym ćwiczeniu użyjesz zagnieżdżonych StackLayout
kontenerów, aby rozmieścić widoki w interfejsie użytkownika. Pierwszy zrzut ekranu przedstawia układ zaimplementowany przez projekt startowy, a drugi przedstawia układ ukończonego projektu. Twoim zadaniem jest użycie StackLayout
kontenerów i LayoutOptions
przekształcenie projektu początkowego w ukończoną wersję.
Eksplorowanie rozwiązania startowego
Rozwiązanie początkowe zawiera w pełni funkcjonalną aplikację kalkulatora porad. Zacznij od zapoznania się z interfejsem użytkownika, aby zrozumieć, co robi aplikacja.
Za pomocą programu Visual Studio otwórz rozwiązanie startowe w folderze exercise2/TipCalculator w repozytorium sklonowanym na początku poprzedniego ćwiczenia.
Skompiluj i uruchom aplikację w preferowanym systemie operacyjnym.
Wprowadź liczbę w polu tekstowym i użyj aplikacji, aby zobaczyć, jak działa.
Poeksperymentuj z przyciskami ilości wskazówek i suwakiem.
Po zakończeniu zamknij aplikację.
Otwórz plik MainPage.xaml. Zwróć uwagę, że wszystkie widoki są umieszczane w jednym
VerticalStackLayout
obiekcie, jak pokazano na poniższej adiustacji XAML:XML<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>
Naprawianie interfejsu użytkownika
Teraz, gdy aplikacja została uruchomiona, możesz poprawić jej wygląd, dodając HorizontalStackLayout
kontenery. Celem jest, aby aplikacja wyglądała jak zrzut ekranu na początku laboratorium.
Otwórz plik MainPage.xaml.
Dodaj
40
jednostki wypełnienia i10
odstępy między elementami :VerticalStackLayout
XML<VerticalStackLayout Padding="40" Spacing="10">
Dodaj element
HorizontalStackLayout
do grupyLabel
z informacją Bill z polemEntry
poniżej. Ustaw właściwośćSpacing
na10
.Ustaw właściwość
WidthRequest
BillLabel
na , a100
VerticalOptions
właściwość naCenter
. Te zmiany zapewniają wyrównanie etykiety w pionie doEntry
pola.XML<HorizontalStackLayout Spacing="10"> <Label Text="Bill" WidthRequest="100" VerticalOptions="Center"/> <Entry ... /> </HorizontalStackLayout>
Dodaj kolejny
HorizontalStackLayout
element do grupyLabel
z informacjąLabel
o nazwie tipOutput.Spacing
Ustaw właściwość na10
, aMargin
właściwość na0,20,0,0
.Ustaw poradę
WidthRequest
Label
na wartość100
XML<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Label Text="Tip" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>
Użyj wartości ,
HorizontalStackLayout
aby zgrupować wartośćLabel
Total zLabel
nazwą totalOutput. Ustaw właściwośćSpacing
na10
.Ustaw wartość
WidthRequest
sumy naLabel
100
XML<HorizontalStackLayout Spacing="10"> <Label Text="Total" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>
Dodaj kolejny
HorizontalStackLayout
element do grupyLabel
z informacją Procent porad z nazwaną poradąPercentLabel
.VerticalOptions
Ustaw właściwość naHorizontalStackLayout
End
wartość i ustawSpacing
właściwość na10
:WidthRequest
Ustaw wartość procentowąLabel
porady na100
XML<HorizontalStackLayout VerticalOptions="End" Spacing="10"> <Label Text="Tip Percentage" WidthRequest="100"/> <Label ... /> </HorizontalStackLayout>
Użyj elementu ,
HorizontalStackLayout
aby zgrupować obiektButton
z podpisem 15% iButton
podpisem 20%.Margin
Ustaw właściwość tejStackLayout
właściwości na0,20,0,0
, aSpacing
właściwość na10
:XML<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Button Text="15%" ... /> <Button Text="20%" ... /> </HorizontalStackLayout>
Dodaj finał
HorizontalStackLayout
, aby zgrupować elementButton
z podpisem Round Down iButton
podpisem Round Up..Margin
Ustaw właściwość tejStackLayout
właściwości na0,20,0,0
, aSpacing
właściwość na10
:XML<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Button ... Text="Round Down" /> <Button ... Text="Round Up" /> </HorizontalStackLayout>
We wszystkich czterech kontrolkach przycisku ustaw
HorizontalOptions
właściwość naCenter
, aWidthRequest
właściwość na150
. Na przykład:XML<Button Text="15%" WidthRequest="150" HorizontalOptions="Center" ... />
Pełny znacznik języka znaczników aplikacji rozszerzalnej (XAML) dla strony zawartości powinien wyglądać następująco:
<?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>
Sprawdzanie wyników
Ponownie uruchom aplikację i przyjrzyj się różnicom w interfejsie użytkownika. Sprawdź, czy kontrolki są prawidłowo wyrównane i mają prawidłowy rozmiar i odstępy.
Użyliśmy VerticalStackLayout
kontenerów i HorizontalStackLayout
ulepszyliśmy estetykę istniejącego interfejsu użytkownika. Te układy są najprostszymi panelami układów, ale są wystarczająco wydajne, aby utworzyć rozsądny interfejs użytkownika.