概要

Xamarin.Formsで、ページ(画面)の切り替えの方法をまとめました。

環境

  • Xamarin.Forms 2.3.3.180
  • MacOS Sierra 10.12.2
  • Visual Studio for Mac

ページの切り替え

ページの切り替えには、大きく2つあります。

MainPageに直接指定

ひとつめは、非常に簡単な方法で、現在の表示しているページを決定する「MainPage」にページのインスタンスを追加します。

この方法は、一番最初に表示されるページを指定しているApp.xaml.csでの設定方法と同じです。

ただ、App.xaml.csでは、「MainPage = new ****Page();」のように、直接MainPageにインスタンスを指定していますが、App.xaml.cs以外では、下記のようにして、ページを設定します。

Application.Current.MainPage = new ****Page();

Application.Current.MainPageのように指定しする必要があります。

ページ遷移の履歴が残らないので、戻るボタン等で戻ることができません。

何も設定を変えずにXamarin.Formsのプロジェクトを作成すると、ContentPageクラスを使ったページを作ることになります。このクラスは、ひとつめのデメリットである、戻るボタン等で戻ることができないという問題を抱えています。

そのため、戻るボタンを使いたい場合は、Page自体にページ遷移の履歴を残すことができるNavigationPageクラスやTabbedPageクラスやCarouselPageクラスを使います。

今回は、NavigationPageクラスを使って説明します。

NavigationPageクラスには、PushAsync()やPopAsync()メソッドがあるので、これを使ってページの管理をしていきます。

実際の使い方は、まずApp.xaml.csのMainPageを下記のようにします。

MainPage = new NavigationPage(new ****Page());

このようにして、最初のページをNavigationPageクラスで、登録しておく必要があります。

そして、ページを移動したい場合はNavigationを使います。

Navigation.PushAsync(new ****Page(), true);

PushAsync()メソッドは、ページを追加して移動します。

第二引数のtrueは、ページの移動時にアニメーションをするかどうかを決めるもので、今回はtrueということでアニメーションを有効にしています。

有効にしたくない場合は、falseを指定するか、第二引数を書かないようにします。

ページを戻りたい場合も、同じくNavigationを使います。

Navigation.PopAsync(true);

PoPAsync()メソッドは、ひとつ前のページに移動します。

引数のtrueは、ージの移動時にアニメーションをするかどうかを決めるもので、今回はtrueということでアニメーションを有効にしています。

有効にしたくない場合は、falseを指定するか、第二引数を書かないようにします。

実は、PushAsync()やPopAsync()には、他にもPushModalAsync()やPopModalAsync()などがあります。

これらは、移動時のNavigationPageの表示に関係してきます。

これは一例ですが、PushAsync()やPopAsync()では、画面の左上等に戻るボタンが表示されます。

そして、PushModalAync()やPopModalAsync()では、そのようなボタンは表示されず、そのままページの中身が変わります。

これは、実際に使ってみた方がわかりやすいと思います。

まとめ

ページの移動は、よく使うものなので、覚えて使いこなせるようになりたいです。