Ć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
VerticalStackLayoutobiekcie, jak pokazano na poniższej adiustacji XAML:<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
40jednostki wypełnienia i10odstępy między elementami :VerticalStackLayout<VerticalStackLayout Padding="40" Spacing="10">Dodaj element
HorizontalStackLayoutdo grupyLabelz informacją Bill z polemEntryponiżej. Ustaw właściwośćSpacingna10.Ustaw
WidthRequestdokumentu BillLabelna100i właściwośćVerticalOptionsnaCenter. Te zmiany zapewniają wyrównanie etykiety w pionie doEntrypola.<HorizontalStackLayout Spacing="10"> <Label Text="Bill" WidthRequest="100" VerticalOptions="Center"/> <Entry ... /> </HorizontalStackLayout>Dodaj kolejny
HorizontalStackLayout, aby pogrupowaćLabel, które zawiera tekst Porada, zLabelo nazwie tipOutput.SpacingUstaw właściwość na10, aMarginwłaściwość na0,20,0,0.Ustaw poradę
WidthRequestLabelna wartość100<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Label Text="Tip" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>Użyj
HorizontalStackLayout, aby zgrupowaćLabelzawierający Total zLabelo nazwie totalOutput. Ustaw właściwośćSpacingna10.Ustaw wartość
WidthRequestsumy naLabel100<HorizontalStackLayout Spacing="10"> <Label Text="Total" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>Dodaj kolejny
HorizontalStackLayoutdo grupyLabelz informacją Procent napiwku z nazwąLabeltipPercent.VerticalOptionsUstaw właściwość naHorizontalStackLayoutEndwartość i ustawSpacingwłaściwość na10:WidthRequestUstaw wartość procentowąLabelporady na100<HorizontalStackLayout VerticalOptions="End" Spacing="10"> <Label Text="Tip Percentage" WidthRequest="100"/> <Label ... /> </HorizontalStackLayout>Użyj
HorizontalStackLayoutaby zgrupowaćButtonz podpisem 15% iButtonz podpisem 20%.MarginUstaw właściwość tejStackLayoutwłaściwości na0,20,0,0, aSpacingwłaściwość na10:<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Button Text="15%" ... /> <Button Text="20%" ... /> </HorizontalStackLayout>Dodaj końcowy
HorizontalStackLayout, aby zgrupowaćButtonz podpisem Round Down orazButtonz podpisem Round Up.MarginUstaw właściwość tejStackLayoutwłaściwości na0,20,0,0, aSpacingwłaściwość na10:<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Button ... Text="Round Down" /> <Button ... Text="Round Up" /> </HorizontalStackLayout>We wszystkich czterech kontrolkach przycisku ustaw
HorizontalOptionswłaściwość naCenter, aWidthRequestwłaściwość na150. Na przykład:<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.