演習 - StackLayout を使用してユーザー インターフェイスを構築する
この演習では、入れ子になった StackLayout コンテナーを使い、ご利用のユーザー インターフェイス (UI) にビューを配置します。 最初のスクリーンショットはスターター プロジェクトで実装されたレイアウト、2 番目のスクリーンショットは完成したプロジェクトのレイアウトを表しています。 あなたが行うことは、StackLayout コンテナーと LayoutOptions を使用して、スターター プロジェクトを完成バージョンにすることです。
スターター ソリューションを確認する
スターター ソリューションには、完全に機能するチップ計算機アプリケーションが含まれています。 まず、このアプリの動作を理解するために、UI を確認します。
Visual Studio を使って、前の演習の最初にクローンしたリポジトリの exercise2/TipCalculator フォルダー内にあるスターター ソリューションを開きます。
任意のオペレーティング システムでアプリをビルドして実行します。
テキスト ボックスに数値を入力し、アプリを使用して、そのしくみを確認します。
チップ量のボタンやスライダーを試します。
完了したら、このアプリを閉じます。
MainPage.xaml を開きます。 次の XAML マークアップで示されるように、すべてのビューが 1 つの
VerticalStackLayoutに配置されていることに注意してください。<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>
UI を修正する
これで、このアプリが実行されていることを確認しました。HorizontalStackLayout コンテナーを追加すると、外観をより良くすることができます。 目標は、このラボの冒頭にあるスクリーンショットのようなアプリにすることです。
MainPage.xaml ファイルを開きます。
40単位のパディングと10単位のスペースをVerticalStackLayoutに追加します。<VerticalStackLayout Padding="40" Spacing="10">HorizontalStackLayoutを追加して、Labelという を、その下のEntryフィールドとグループ化します。Spacingプロパティを10に設定します。WidthRequestのLabelを100に、VerticalOptionsのプロパティをCenterに設定します。 これらの変更により、そのラベルがEntryフィールドと縦に揃うことが保証されます。<HorizontalStackLayout Spacing="10"> <Label Text="Bill" WidthRequest="100" VerticalOptions="Center"/> <Entry ... /> </HorizontalStackLayout>別の
HorizontalStackLayoutを追加して、Labelという を、Labelという名前の とグループ化します。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という を、Labelという名前の とグループ化します。Spacingプロパティを10に設定します。WidthRequestのLabelを100に設定します<HorizontalStackLayout Spacing="10"> <Label Text="Total" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>別の
HorizontalStackLayoutを追加して、Labelという を、Labelという名前の とグループ化します。この
VerticalOptionsのHorizontalStackLayoutプロパティをEndに設定し、Spacingプロパティを10に設定します。WidthRequestのLabelを100に設定します<HorizontalStackLayout VerticalOptions="End" Spacing="10"> <Label Text="Tip Percentage" WidthRequest="100"/> <Label ... /> </HorizontalStackLayout>HorizontalStackLayoutを使って、キャプションButtonの と、キャプションButtonの をグループ化します。この
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>4 つのボタン コントロールすべてで、
HorizontalOptionsプロパティをCenterに、WidthRequestプロパティを150に設定します。 次に例を示します。<Button Text="15%" WidthRequest="150" HorizontalOptions="Center" ... />
このコンテンツ ページの完全な Extensible Application Markup Language (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>
結果を確認する
もう一度アプリを実行し、UI で違いを確認します。 コントロールが正しく配置され、適切なサイズと間隔であることを確認します。
既存の UI の外観を向上させるために、VerticalStackLayout コンテナーと HorizontalStackLayout コンテナーを使いました。 これらのレイアウトは、最もシンプルなレイアウト パネルですが、適切な UI を作成するには十分強力なものです。