1

アプリが特定のページに移動した場合、アプリが中断または終了された後、アプリが別の (私の場合は前の) ページにあることを確認したいと思います。私の場合、ページは写真を撮るためのものです。コンテキスト情報がないため、アプリがバックグラウンドになった後にユーザーがこのページに戻ることは望ましくありません。コンテキスト情報は前のページにあります。

Prism.StoreApps でこれを達成するにはどうすればよいですか?

バックグラウンド: アプリが一時停止されたばかりの場合、再開後もアプリの状態が維持されるため、最後にアクティブだったページが再びアクティブになります。この場合、別のページをアクティブに設定する方法がわかりません。アプリが終了した場合、Prim.StoreApps はナビゲーション状態を復元し、最後にアクティブだったビュー モデル (つまり、最後にアクティブだったページ) に移動します。この場合、ナビゲーション状態を変更して別のページに移動する方法もわかりません。

4

1 に答える 1

0

その間、私は自分で実用的なソリューションが好きです。最善ではないかもしれませんし、より良い解決策があるかもしれませんが、うまくいきます。

アプリを再開するために、Resumingイベントを処理します。

private void OnResuming(object sender, object o)
{
   // Check if the current root frame contains the page we do not want to 
   // be activated after a resume
   var rootFrame = Window.Current.Content as Frame;
   if (rootFrame != null && rootFrame.CurrentSourcePageType == typeof (NotToBeResumedOnPage))
   {
      // In case the page we don't want to be activated after a resume would be activated:
      // Go back to the previous page (or optionally to another page)
      this.NavigationService.GoBack();
   }
}

終了後のページの復元では、まずAppクラスのプロパティを使用します。

public bool MustPreventNavigationToPageNotToBeResumedOn { get; set; }

public App()
{
    this.InitializeComponent();

    // We assume that the app was restored from termination and therefore we must prevent navigation 
    // to the page that should not be navigated to after suspension and termination. 
    // In OnLaunchApplicationAsync MustPreventNavigationToPageNotToBeResumedOn is set to false since 
    // OnLaunchApplicationAsync is not invoked when the app was restored from termination.
    this.MustPreventNavigationToPageNotToBeResumedOn = true; 

    this.Resuming += this.OnResuming;
}

protected override Task OnLaunchApplicationAsync(LaunchActivatedEventArgs args)
{
   // If the application is launched normally we do not prevent navigation to the
   // page that should not be navigated to.
   this.MustPreventNavigationToPageNotToBeResumedOn = false;

   this.NavigationService.Navigate("Main", null);

   return Task.FromResult<object>(null);
}

OnNavigatedTo履歴書でアクティブにしたくないページで、このプロパティをチェックし、そうである場合は単に戻って移動します(その後のナビゲーションを許可するようtrueにプロパティを設定します):false

public override void OnNavigatedTo(object navigationParameter, NavigationMode navigationMode, 
   Dictionary<string, object> viewModelState)
{
   if (((App)Application.Current).MustPreventNavigationToPageNotToBeResumedOn)
   {
      // If must prevent navigation to this page (that should not be navigated to after 
      // suspension and termination) we reset the marker and just go back. 
      ((App)Application.Current).MustPreventNavigationToPageNotToBeResumedOn = false;
      this.navigationService.GoBack();
   }
   else
   {
      base.OnNavigatedTo(navigationParameter, navigationMode, viewModelState);
   }
}
于 2015-05-15T17:11:14.983 に答える