演習 - Grid を使用してユーザー インターフェイスを構築する

完了

この演習では、Grid を使って、ユーザー インターフェイス (UI) のビューを配置します。 TipCalculator プロジェクトの別のバージョンから始めて、UI がより直感的になるように調整します。 また、ボタンをページの下部に移動します。 今回は、VerticalStackLayoutHorizontalStackLayout を使うのではなく、Grid レイアウトを使います。 次の画像は、初期の UI と、この演習の手順に従った結果の UI を示しています。

垂直の StackLayout を使用してすべてのラベルが垂直に配置されているスターター ソリューションと、コントロールが Grid を使用して配置されている完成しているスターターを示すスクリーンショット。

スターター ソリューションを開く

スターター ソリューションには、完全に機能するチップ計算機アプリケーションが含まれています。

  1. Visual Studio を使って、前の演習の最初にクローンしたリポジトリの exercise3/TipCalculator フォルダー内にあるスターター ソリューションを開きます。

  2. MainPage.xaml を開きます。 すべてのビューが 1 つの VerticalStackLayout パネルを使って表示されていることに注意してください。

    <?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>
    
            <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>
    
    

Grid レイアウトを作成する

  1. 40 単位のパディングで、レイアウト パネルを VerticalStackLayout から Grid に変更します。

  2. Grid に対して 7 つの行と 2 つの列を定義します。 4 番目の行を除き、すべての行が Auto サイズになるようにします。 4 行目では、グリッドに残っている使用可能なすべての領域を取得するように、Star を使う必要があります。 両方の列で、Star サイズを使用します。

    <Grid RowDefinitions="Auto, Auto, Auto, *, Auto, Auto, Auto"
          ColumnDefinitions="*, *"
          Padding="40">
        ...
    </Grid>
    

セルにビューを配置する

  1. Grid.RowGrid.Column の設定を各ビューに追加し、それらを Grid の適切なセルに割り当てます。 以下のスクリーンショットを使用すれば、各ビューの配置場所を決定するのに役立ちます。

    コントロールが配置されている場所を示す破線のグリッド オーバーレイが表示された、完成したソリューションを示すスクリーンショット。

    次の例では、BillLabel と、billInputEntry ビューの位置を設定する方法を示します。

    ...
    <Label Text="Bill" Grid.Row="0" Grid.Column="0"/>
    <Entry x:Name="billInput" Placeholder="Enter Amount" Keyboard="Numeric" Grid.Row="0" Grid.Column="1"/>
    ...
    
  2. LabelVerticalOptions プロパティを Center に設定して、BillLabelEntry を配置します。

  3. Grid.ColumnSpan の設定を Slider に追加して、2 つの列にまたがるようにします。

    <Slider ... Grid.ColumnSpan="2" ... />
    
  4. Tip Percentage というテキストの Label を見つけます。 これを、四角形の左下の位置を占めるように設定します。

    <Label Text="Tip Percentage" VerticalOptions="End" HorizontalOptions="Start" ... />
    
  5. tipPercent という名前の Label を見つけます。 これを、四角形の右下の位置を占めるように設定します。

    <Label x:Name="tipPercent" VerticalOptions="End" HorizontalOptions="End" ... />
    
  6. 4 つのボタンすべての Margin プロパティを 5 に設定します。

このページの完全な Extensible Application Markup Language (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">
    <Grid RowDefinitions="Auto, Auto, Auto, *, Auto, Auto, Auto"
          ColumnDefinitions="*, *"
          Padding="40">

        <Label Text="Bill" VerticalOptions="Center" Grid.Row="0" Grid.Column="0"/>
        <Entry x:Name="billInput" Placeholder="Enter Amount" Keyboard="Numeric" Grid.Row="0" Grid.Column="1"/>

        <Label Text="Tip" Grid.Row="1" Grid.Column="0"/>
        <Label x:Name="tipOutput" Text="0.00" Grid.Row="1" Grid.Column="1"/>

        <Label Text="Total" Grid.Row="2" Grid.Column="0"/>
        <Label x:Name="totalOutput" Text="0.00" Grid.Row="2" Grid.Column="1"/>

        <Label Text="Tip Percentage" VerticalOptions="End" HorizontalOptions="Start" Grid.Row="3" Grid.Column="0"/>
        <Label x:Name="tipPercent" Text="15%" VerticalOptions="End" HorizontalOptions="End" Grid.Row="3" Grid.Column="1"/>
        <Slider x:Name="tipPercentSlider" Minimum="0" Maximum="100" Value="15" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2"/>

        <Button Text="15%" Clicked="OnNormalTip" Margin="5" Grid.Row="5" Grid.Column="0"/>
        <Button Text="20%" Clicked="OnGenerousTip" Margin="5" Grid.Row="5" Grid.Column="1"/>

        <Button x:Name="roundDown" Margin="5" Text="Round Down" Grid.Row="6" Grid.Column="0"/>
        <Button x:Name="roundUp"   Margin="5" Text="Round Up" Grid.Row="6" Grid.Column="1"/>

    </Grid>
</ContentPage>

結果を確認する

アプリケーションを実行し、UI で違いを確認します。 既存の UI の外観を向上させるために、Grid を使用しました。 GridStackLayout よりも強力です。 つまり、Grid を使うと、行全体にビューを配置する操作がはるかに簡単になります。