演習: ポップアップ ナビゲーションを実装する
サンプル シナリオでは、天体、月の満ち欠け、日の出/日の入り時間に関する情報を表示するためのページを含む MAUI アプリがあります。 アプリには [バージョン情報] ページも含まれています。 現在、これらのページはすべてスタンドアロンですが、ユーザーがそれらの間を移動するための論理的な方法を提供する必要があります。
この演習では、アプリにポップアップ ナビゲーションを追加します。
このモジュールでは、.NET 8.0 SDK を使います。 適切なコマンド ターミナルで次のコマンドを実行して、.NET 8.0 がインストールされていることを確認します。
dotnet --list-sdks
次の例のような出力が表示されます。
6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
8
で始まるバージョンが一覧に表示されていることを確実にします。 何も表示されない場合、またはコマンドが見つからない場合は、最新の .NET 8.0 SDK をインストールしてください。
スターター ソリューションを開く
exercise repo をクローンまたはダウンロードします。
注意
ビルドによって生成されたファイルが最大パス長を超えないようにするため、演習コンテンツを C:\dev などの短いフォルダー パスに複製またはダウンロードすることをお勧めします。
複製されたリポジトリの exercise1 フォルダーに移動し、start フォルダーに移動します。
Visual Studio を使用して、Astronomy.sln ソリューションまたは Visual Studio Code 内のフォルダーを開きます。
ソリューション エクスプローラー ウィンドウの Astronomy プロジェクトで Pages フォルダーを展開します。 このフォルダーには、次のページが含まれています。
- AboutPage。 このページには、アプリの バージョン情報 が表示されます。
- MoonPhasePage。 このページには、地球から見た月の満ち欠けに関する特定の情報が表示されます。
- SunrisePage。 このページには、地球上の場所の日の出と日の入りの時間が表示されます。 データは Sunrise Sunset web service によって提供されます。
アプリケーションをビルドし、実行します。 アプリが起動すると MoonPhasePage が表示されますが、現在、ユーザーが他のページに移動できるようにする手段はありません。
次の画像は、Android エミュレーター上で実行されているアプリを示しています。
アプリを閉じて、Visual Studio または Visual Studio Code に戻ります。
ポップアップ ナビゲーションを追加する
ソリューション エクスプローラー ウィンドウで AppShell.xaml ページを開きます。
XAML マークアップ エディターで、既存の
<ShellContent>
の項目を<FlyoutItem>
で囲みます。<Flyout>
項目のTitle
プロパティを [Moon Phase] に設定します。 マークアップは次のようになります。<FlyoutItem Title="Moon Phase"> <ShellContent ContentTemplate="{DataTemplate local:MoonPhasePage}"/> </FlyoutItem>
FlyoutIcon
プロパティを<Shell>
ノードに追加して画像を表示します。 既定では 3 本の水平バーが表示されますが、好みに合わせて変更できます。 マークアップは次のようになります。<Shell x:Class="Astronomy.AppShell" xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Astronomy.Pages" FlyoutIcon="moon.png">
アプリケーションを実行します。 これで、アプリの左上隅に月の画像が表示されます。
アイコンをタップすると、ポップアップが表示されます。
次に、ポップアップ オプションをさらに追加します。 先ほど作成したものの下に新しい
<FlyoutItem>
を作成し、そのTitle
を [Sunrise] に設定します。 そのShellContent
は、SunrisePage
ページを指す必要があります。別の
<FlyoutItem>
を追加し、そのタイトルを [バージョン情報] に設定します。 今回はShellContent
をAboutPage
に設定します。 これら 2 つのアイテムのための XAML は次のようになるはずです。<FlyoutItem Title="Sunrise"> <ShellContent ContentTemplate="{DataTemplate local:SunrisePage}"/> </FlyoutItem> <FlyoutItem Title="About"> <ShellContent ContentTemplate="{DataTemplate local:AboutPage}"/> </FlyoutItem>
アプリを再実行すると、ポップアップに 3 つのオプションが表示されます。 ポップアップ アイテムをタップすると、それぞれのページが表示されます。
Note
Windows 以外のプラットフォームで実行している場合は、Sunrise/Sunset Times ページを機能させるために、そのプラットフォームでアプリの Location アクセス許可を有効にする必要がある場合があります。 たとえば、Android デバイスで、Location アクセスを [アプリを使用している間のみ許可] に設定します。
アイコンの追加
ポップアップ アイテムにやや空きがあることに気付いたかもしれません。 Icon
プロパティを使用して、ポップアップ項目にアイコンを 追加できます。
一部の画像は、既に Resources\Images フォルダーに追加されており、使用できます。
最初の
FlyoutItem
のIcon
プロパティを [moon.png] に設定します。<FlyoutItem Title="Moon Phase" Icon="moon.png"> <ShellContent ContentTemplate="{DataTemplate local:MoonPhasePage}" /> </FlyoutItem>
sun.png と question.png をそれぞれ使用して、他の 2 つのポップアップ項目について繰り返します。
<FlyoutItem Title="Sunrise" Icon="sun.png"> <ShellContent ContentTemplate="{DataTemplate local:SunrisePage}"/> </FlyoutItem> <FlyoutItem Title="About" Icon="question.png"> <ShellContent ContentTemplate="{DataTemplate local:AboutPage}"/> </FlyoutItem>
アプリを実行し、ポップアップを開きます。 各ポップアップ アイテムが、それに関連付けられたアイコンを持つようになりました。
ポップアップ ヘッダーを追加する
ポップアップ アイテムはポップアップ メニューの一番上に配置されているため、それらの区別が困難になっています。 <Shell.FlyoutHeader>
を使用して、上部にスペースを追加したり、さらに View
全体を追加したりできます。
ポップアップ ヘッダーを
<Shell>
ノードの子として追加します。<Shell.FlyoutHeader> </Shell.FlyoutHeader>
<Shell.FlyoutHeader>
の中で、任意のビュー階層を作成できます。Image
の付いたGrid
を入れましょう。<Shell.FlyoutHeader> <Grid HeightRequest="100" BackgroundColor="DarkSlateBlue"> <Image Source="moon.png" /> </Grid> </Shell.FlyoutHeader>