.NET MAUI Shell を使用してタブ ナビゲーションを実装する

完了

タブ ナビゲーションは、タブ ストリップ (タッチできるコントロールの行) が画面の上部または下部に常に表示されるナビゲーション パターンです。 タブ ナビゲーションは、ユーザーが複数ページ アプリでページを選択するためのメカニズムを提供します。

このユニットでは、タブ ナビゲーションを実装するアプリを作成する方法について学習します。

タブ ナビゲーションとは

タブ ナビゲーションを使うアプリでは、各タブはアプリの特定のセクションまたはページを表します。 ユーザーは、タブ ストリップ内のタブを選択してアプリケーション内のコンテンツ間を移動します。 たとえば、次の図は iOS の時計アプリで使われているタブ ナビゲーションを示したものです。 ページの下部で強調表示されているアイコンを使うと、別のビューに切り替えることができます。 これらのアイコンはタブに対応し、ビューはタブ化されたページです。

Screenshot of the i O S Clock app showing the bottom tab bar containing various time-related tabs: World Clock, Alarm, Bedtime, Stopwatch, and Timer.

タブ ストリップは常に表示されるので、ユーザーはタブ ナビゲーションを使ってアプリケーション内のコンテンツをすばやく切り替えることができます。 タブ ナビゲーションは、ユーザーがよく使う可能性があるセクションがアプリケーションに複数ある場合に最適です。 時計アプリケーションはその好例です。 時計、アラーム、ストップウォッチはよく使われる可能性が高いセクションです。

モバイル デバイスでは、タブ ストリップの領域は限られており、デバイスのサイズと向きに応じて一定数のタブしか表示できません。 使うタブは、3 から 4 個だけにすることをお勧めします。 含めるタブを増やすと、デバイスによっては、すべてのタブを表示できる十分な領域を確保できなくなります。 .NET MAUI でサポートされているオペレーティング システムは、オーバーフロー領域に対応しています。 この領域では、画面に収まらないタブにアクセスするための追加領域が提供されます。 しかし、このようなオーバーフロー タブに移動するには、ユーザーが追加の手順を行う必要があります。 このようなセクションは簡単に見つかりません。

4 つより多くのタブが必要な場合は、ポップアップ項目ナビゲーションなど、別のナビゲーション パターンを使うことを検討してください。 さらに、データの自然な形式がマスター詳細階層である場合は、タブ ナビゲーションは最適なオプションではありません。 このような場合は、スタック ナビゲーションを検討する必要があります。

.NET MAUI アプリでのタブ ナビゲーション

Shell .NET MAUI シェル アプリでタブ ナビゲーションを実装するには、TabBar オブジェクトを使います。 TabBar オブジェクトを使うと、タブのセットが表示され、ユーザーがタブを選ぶと表示されるコンテンツが自動的に切り替わります。次の図は、UI 領域を示したものです。

Illustration showing an example Tabbed Page with a content area and a bottom tab bar containing three children pages: Globe, Compass, and Map.

.NET MAUI Shell アプリケーションでタブを使うには、Shell クラスの子として TabBar クラスのインスタンスを作成します。 次に、Tab オブジェクトを TabBar に追加します。 Tab オブジェクト内では、ShellContent オブジェクトを ContentPage オブジェクトに設定する必要があります。

TabbedPage を作成する

TabBar のインスタンスは、Shell クラスの子として作成できます。 必要に応じて、Tab オブジェクトを TabBar に子として追加します。 Tab オブジェクト内では、ShellContent オブジェクトを ContentPage オブジェクトに設定する必要があります。

<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
       xmlns:views="clr-namespace:Xaminals.Views"
       x:Class="Xaminals.AppShell">
    <TabBar>
       <Tab Title="Moon Phase"
            Icon="moon.png">
           <ShellContent ContentTemplate="{DataTemplate local:MoonPhasePage}" />
       </Tab>
       <Tab Title="Sunrise"
            Icon="sun.png">
           <ShellContent ContentTemplate="{DataTemplate local:SunrisePage}" />
       </Tab>
    </TabBar>
</Shell>

ポップアップ メニュー内のタブ

ポップアップ項目では、1 つ以上のタブを表示するタブ バーを含むページを開くことができます。

このデザインを実装するには、表示するタブごとに <FlyoutItem> 内で <ShellContent> 項目を追加します。

タブのタイトルとアイコンを制御するには、<ShellContent>TitleIcon を設定します。

<FlyoutItem Title="Astronomy" Icon="moon.png">
    <ShellContent Title="Moon Phase" Icon="moon.png"
        ContentTemplate="{DataTemplate local:MoonPhasePage}"/>

    <ShellContent Title="Sunrise" Icon="sun.png"
        ContentTemplate="{DataTemplate local:SunrisePage}"/>
</FlyoutItem>

<FlyoutItem Title="About" Icon="question.png">
    <ShellContent
        ContentTemplate="{DataTemplate local:AboutPage}"/>
</FlyoutItem>
1.

タブ ナビゲーションがアプリに適しているのはどのような場合ですか。