こんにちは、開発の久郷です。
今回は、Windows Phone 7 アプリのスタートページの変更方法についてです。
Windows Phone 7 の規定のプロジェクトの場合、 MainPage.xaml が最初に開かれるページに指定されていますが、
WMAppManifest.xml , App.xaml , App.xaml.cs を変更することで、別のページに変えることができます。
WMAppManifest.xml にある、DefaultTask 内の NavigationPage を削除します。
<Tasks> <DefaultTask Name ="_default"/> </Tasks>
これで、ルートから呼ばれるページがなくなりました。
次に、 App.xaml に Startup イベントを追加します。App.xaml は、xaml の形式を取っていますが、先ほどの WMAppManifest.xml の該当箇所に記述せずとも読み込まれることから、アプリケーションインスタンスに該当するようですね。一部とはいえマークアップで記述というのが違和感ありますが、定義なのでよいでしょう。個人的には、エントリポイントがわかるとアプリケーションなのだな~と実感できます。
<Application x:Class="HogeHoge.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" xmlns:xna="clr-namespace:Microsoft.Xna.Framework;assembly=Microsoft.Xna.Framework.Interop"> Startup="Application_Startup"> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
最後に App.xaml で定義した Startup イベントを App.xaml.cs 内に記述します。 Startup イベント内では、条件判定をさせて
遷移先をコントロールすることはもちろん、CreateDatabase も可能です。
private void Application_Startup(object sender, StartupEventArgs e) { if (HogeHoge_Hantei) { RootFrame.Navigate(new Uri("/NormalPage.xaml", UriKind.Relative)); } else { RootFrame.Navigate(new Uri("/ExtendPage.xaml", UriKind.Relative)); } }
導線分岐は、業務系アプリケーションの構築などワークフロー に沿うものでは必須ですが、MetroUI での構築の場合、グラフィックはシンプルなものとなるため、遷移前後で現在位置をユーザが見失う可能性が高くなります(それ故に遷移階層の深さやPanoramaのページ数についてもマイクロソフトはガイドラインを示しています)。
インジケーター やナビゲーションサインで現在位置をユーザー に示すという方法も無いわけではないですが、煩くなってしまうのは本末転倒です。
MetroUI ではインタラクションのデザインが非常に重要な位置を占めることになると思います。