Упражнение. Использование макета StackLayout для создания пользовательского интерфейса
В этом упражнении для упорядочивания представлений в пользовательском интерфейсе используются StackLayout вложенные контейнеры. На первом снимке экрана показан макет, реализованный при стартовом проекте, а на втором — макет завершенного проекта. Ваша задача — использовать контейнеры StackLayout и LayoutOptions, чтобы превратить стартовый проект в готовую версию.
Обзор стартового решения
Стартовое решение содержит полнофункциональное приложение калькулятора подсказок. Начните с изучения пользовательского интерфейса, чтобы понять, что делает приложение.
С помощью Visual Studio откройте начальную версию решения в папке exercise2/TipCalculator в репозитории, клонированного в начале предыдущего упражнения.
Создайте и запустите приложение в предпочитаемой операционной системе.
Введите число в текстовое поле и посмотрите, как это работает.
Поэкспериментируйте с кнопками суммы чаевых и ползуноком.
По завершении закройте приложение.
Откройте Файл MainPage.xaml. Обратите внимание, что все представления помещаются в один макет
VerticalStackLayout, как показано в следующей разметке 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>
Исправление пользовательского интерфейса
Теперь, когда вы видели запуск приложения, вы можете сделать его лучше, добавив HorizontalStackLayout контейнеры. Цель состоит в том, чтобы приложение выглядело как снимок экрана в начале нашей лабораторной работы.
Откройте файл MainPage.xaml .
Добавьте
40единиц заполнения и10единиц интервала вVerticalStackLayout:<VerticalStackLayout Padding="40" Spacing="10">Добавьте
HorizontalStackLayoutдля группировкиLabel, который говорит Билл, с полемEntryниже него. Установите свойствоSpacingв значение10.WidthRequestЗадайте для биллаLabel100значение иVerticalOptionsсвойство .CenterЭти изменения гарантируют, что метка выравнивается по вертикали с полемEntry.<HorizontalStackLayout Spacing="10"> <Label Text="Bill" WidthRequest="100" VerticalOptions="Center"/> <Entry ... /> </HorizontalStackLayout>Добавьте еще один
HorizontalStackLayoutв группуLabelс надписьюLabelTip с именем tipOutput. Задайте для свойстваSpacingзначение10, а для свойстваMargin— значение0,20,0,0.WidthRequestЗадайте для подсказкиLabelзначение100<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Label Text="Tip" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>Используйте
HorizontalStackLayoutдля группировкиLabel, которая говорит Total, сLabel, именуемым totalOutput. Установите свойствоSpacingв значение10.Задайте
WidthRequestИтогоLabelна100<HorizontalStackLayout Spacing="10"> <Label Text="Total" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>Добавьте еще один
HorizontalStackLayout, чтобы сгруппироватьLabel, на котором написано Tip Percentage, сLabel, имеющим имя tipPercent.VerticalOptionsЗадайте для этогоHorizontalStackLayoutEndсвойства значение и задайтеSpacingдля10свойства значение :WidthRequestЗадайте значение "Процент"Label<HorizontalStackLayout VerticalOptions="End" Spacing="10"> <Label Text="Tip Percentage" WidthRequest="100"/> <Label ... /> </HorizontalStackLayout>Используйте
HorizontalStackLayoutдля группировкиButtonс подписью 15% иButtonс подписью 20%.Установите свойство
Marginэтого параметраStackLayoutна0,20,0,0, а свойствоSpacingустановите на10:<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Button Text="15%" ... /> <Button Text="20%" ... /> </HorizontalStackLayout>Добавьте окончательный для группировки
HorizontalStackLayoutс подписьюButtonи с подписьюButton. Установите свойствоMarginэтого параметраStackLayoutна0,20,0,0, а свойствоSpacingустановите на10:<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Button ... Text="Round Down" /> <Button ... Text="Round Up" /> </HorizontalStackLayout>На всех четырех кнопках управления установите свойство
HorizontalOptionsнаCenter, а свойствоWidthRequest— на150. Например:<Button Text="15%" WidthRequest="150" HorizontalOptions="Center" ... />
Полная разметка языка разметки приложений (XAML) для страницы содержимого должна выглядеть следующим образом:
<?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>
Просмотр результатов
Снова запустите приложение и обратите внимание на различия в пользовательском интерфейсе. Убедитесь, что элементы управления выровнены правильно и правильно расположены.
Чтобы улучшить внешний вид существующего пользовательского интерфейса, мы использовали вложенные контейнеры VerticalStackLayout и HorizontalStackLayout. Данные макеты представляют собой простейшие панели, но их вполне достаточно чтобы создать приемлемый пользовательский интерфейс.