既にWindows 8とWindowsストアのアプリケーションを使用しようとした場合、スタート画面からアプリケーションを起動すると、アプリケーションを置いた場所に戻ることに気づいたかもしれません。 これはまさに、
それでは始めましょう。
WMAppManifest.xml
まず、アプリケーションのマニフェストファイルを開きます(ソリューションエクスプローラーでファイルをクリックし、Visual Studioの英語版で[ソースの表示]を選択します)。 必要なのは、 Resume値を持つActivationPolicyという属性をDefaultTask要素に追加することだけです。 このように:
<DefaultTask Name="_default" NavigationPage="MainPage.xaml" ActivationPolicy="Resume" />
概して、この変更により、アプリケーションが開始画面/アプリケーションリストから再起動されたときに、アプリケーションマニフェストのDefaultTask要素のNavigationPage属性で指定されたページに切り替えて、以前の状態に復元し始めたことを確認しました。 その直後、アプリケーションのナビゲーション履歴は次のようになります。
これにより、システムが状態をクリアせず、アプリケーションを最初から起動しないため、再起動がわずかに加速されました。 しかし、先に進みます。
App.xaml.cs
ここで、アプリケーションを再起動した後、メインページへのこの不要な移行をキャンセルする必要があります。 これを行うには、App.xaml.csファイルを少し編集する必要があります(何らかの理由で、MSDNで説明されているようにSDKが動作しないことがわかるため、少し異なる方法を使用します)。
始めるために、System.Boolean型の非静的なプライベートフィールドをAppクラスに追加して、_resetと呼びましょう。
private bool _reset;
次の手順は、プライベートのInitializePhoneApplicationメソッド(既定のテンプレートによって自動的に作成されます)を見つけ、NavigatingイベントとNavigatedイベントのラッパーを定義することにより、RootFrameの初期化を構成することです。
RootFrame.Navigating += RootFrame_Navigating; RootFrame.Navigated += RootFrame_Navigated;
最後の手順は、これらのイベントのハンドラーメソッドの本体を変更することです。
private void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e) { if (_reset && e.IsCancelable && e.Uri.OriginalString == "/MainPage.xaml") { e.Cancel = true; reset = false; } } private void RootFrame_Navigated(object sender, NavigationEventArgs e) { _reset = e.NavigationMode == NavigationMode.Reset; }
そしてそれだけです、目標は達成されました。 これで、アプリケーションの再起動時にアプリケーションを再開した後、ユーザーはこのアプリケーションを離れた場所を正確に取得できます。
ほんの数分で、アプリケーションをより楽しく操作できるようになりました。
また、現在のページの状態のみを保持したまま、再生したり、再開するときに[戻る]ボタンの履歴をクリアしたりすることもできます。 これを行うには、Navigatedイベントハンドラーに次の行を追加します。
if (e.NavigationMode == NavigationMode.Reset) while (RootFrame.RemoveBackEntry() != null);
それだけです、ご清聴ありがとうございました。
ご注意
元の記事には、 公式文書からいくつかの点が含まれていなかったので、読者を裁判所に追加することが適切であると考えました。