🎉

MAUIでアプリ作成(5)

2024/06/16に公開

MAUIサンプル

ボタンクリックでページ遷移

前回は、Shellの機能で画面遷移を実装しましたが、
今回は、ボタンを押したら画面遷移を実装してみます。

プロジェクト新規作成して、デフォルトであるMainPageと、新しく作成するSubPageをボタンで遷移出来るような実装です。

実装

appShell.xaml
新規作成したSubPageを使用出来る様に登録しときます

 <?xml version="1.0" encoding="UTF-8" ?>
 <Shell
    x:Class="MauiApp.AppShell"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:local="clr-namespace:MauiApp"
    Shell.FlyoutBehavior="Disabled"
    Title="MauiApp">

    <ShellContent
        Title="Main"
        ContentTemplate="{DataTemplate local:MainPage}"
        Route="MainPage" />
+    <ShellContent
+        Title="Sub"
+        ContentTemplate="{DataTemplate local:SubPage}"
+        Route="SubPage" />
 </Shell>

MainPage.xaml
SubPageへ遷移する為のButtonを追加します。

 <?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"
             x:Class="MauiApp.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Padding="30,0"
            Spacing="25">
+            <Button 
+                Text="SubPage"
+                HorizontalOptions="Center" Clicked="OnClicked" />
        </VerticalStackLayout>
    </ScrollView>
 </ContentPage>

プロジェクトを右クリックして「追加」「新しい項目」で「.NET MAUI ContentPage(XAML)」を選択して、SubPageを新規作成してプロジェクトに追加します。
こちらもMainPageへ遷移する為のButtonを追加します。
SubPage.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"
             x:Class="MauiApp.SubPage"
             Title="SubPage">
    <ScrollView>
    <VerticalStackLayout>
+        <Button 
+                Text="MainPage"
+                HorizontalOptions="Center" Clicked="OnClicked" />
    </VerticalStackLayout>

    </ScrollView>
 </ContentPage>

次にbuttonイベントを実装します。もともとあったcount変数等は不要です。
MainPage.xaml.cs

namespace MauiApp17
{
    public partial class MainPage : ContentPage
    {
        //int count = 0;

        public MainPage()
        {
            InitializeComponent();
        }

+       private async void OnClicked(object sender, EventArgs e)
+        {
+            await Shell.Current.GoToAsync("//SubPage");
+        }
    }
}

SubPageの方も全く同じです。

namespace MauiApp17;

public partial class SubPage : ContentPage
{
	public SubPage()
	{
		InitializeComponent();
	}

+    private async void OnClicked(object sender,EventArgs e)
+	{
+		await Shell.Current.GoToAsync("//MainPage");
+    }
}

動作確認

起動させると、最初にMainPageが表示される。

SubPageボタンを押すと、SubPageに遷移する

Discussion