Visual StudioやExpression Blendのウィザードで作成したプロジェクトは、アプリケーション起動時に毎回MainPage.xamlから表示されますが、この動作は暗黙の仕様ではなくアプリケーションのマニフェストファイル上で明文的に定義されています。
例えばログイン状態や無償ユーザーに対しての告知をおこないたい場合など、アプリケーション起動時に表示されるルートページを切り替えたいというニーズがあります。起動時に表示するルートページを切り替えられるようにしてみましょう。
ソリューションエクスプローラーにてPropertiesフォルダに格納されているWMAppManifest.xmlを開きます。Tasks要素下にDefaultTask要素が定義されており、このタグがアプリケーション起動時に開くページを指します。
DefaultTask要素からNavigationPageプロパティの定義を削除します。
<Tasks> <DefaultTask Name ="_default" /> </Tasks>
DefaultTask要素のNavigationPageプロパティを削除した状態でアプリケーションを起動すると、スプラッシュ画面で停止してしまいます。
アプリケーションを起動すると、ApplicationクラスのStartupイベントが発行されます。Startupイベント内にて起動するページを指定すれば、ルートページを切り替えることができます。Startupにイベントハンドラを設定してください。
<Application x:Class="NavigationStartupTest.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" Startup="Application_Startup">
次にコード側にイベントハンドラを追加します。下記のソースコードでは、ログイン状態や課金状態から起動するページを切り替えています。
private void Application_Startup(object sender, StartupEventArgs e) { // ログイン状態や起動回数、有償/無償状態での起動するページを切り替える if (なんらかのフラグ) { RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative)); } else { RootFrame.Navigate(new Uri("/SubPage.xaml", UriKind.Relative)); } }
以上で、アプリケーション起動時にルートページを切り替える方法は終わりです。