2016-05-16 3 views
0

ユーザーが閲覧している現在のページが特定のページ(メインページ)であるかどうかを確認します。ユーザーがMainPage上にいる場合は、戻るボタンを押しても前のページに移動するのではなく、アプリケーションを終了するようにしたい。とにかくユーザーが現在使っているページが何であるかを確認するにはどうすればよいですか?Windows 10開発:現在のページが特定のページであるかどうかを確認する方法は?

私が達成したいことを達成するためのより良い方法はありますか?メインページの戻るボタンを押しても前のページに移動するのではなく、代わりにアプリケーションを終了しますか?

答えて

0

ナビゲーション方法でNavigationEventArgs.SourcePageTypeをご覧ください。現在のページのタイプを返します。

NOTE

バックボタンがそのエントリ(ページ)に移動しますbackstackにエントリがあるまで。バックスティックが空の場合は、バックボタンを押すとアプリが終了します。ユーザーがホームボタン(メインページにナビゲート)を押したときの私のアプリでは、MainPageを除くすべてのバックスタックから常にすべてを削除します。これにより、MainPageの戻るボタンを押しても必ず終了します。

EDIT私は戻ってメインページに行くために使用 コード(このソリューションのプロは、それらが削除されるので、彼らはweren場合はこの方法がbackstack内のページのナビゲーションイベントは、呼び出されることはないということです「Tは、予期しない動作を引き起こす可能性backstack、を横断しながら、彼らのナビゲーションイベントが呼び出されます削除):。

private void goHome() { 

     var bs = Frame.BackStack.Where(b => b.SourcePageType.Name == "MainPage").FirstOrDefault(); 

     if (bs != null) 
     { 
      Frame.BackStack.Clear(); 
      Frame.BackStack.Add(bs); 
     } 

     this.Frame.GoBack(); 
} 
0

あなたはそのために、このコードを使用することができます。

App.xaml.csでこれを入れてOnLaunchedメソッドの最後に

// Register a handler for BackRequested events and set the 
// visibility of the Back button 
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested; 

SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = 
      rootFrame.CanGoBack ? 
      AppViewBackButtonVisibility.Visible : 
      AppViewBackButtonVisibility.Collapsed; 

そして

private void OnBackRequested(object sender, BackRequestedEventArgs e) 
{ 
    Frame rootFrame = Window.Current.Content as Frame; 
    if (rootFrame.CanGoBack) 
    { 
     e.Handled = true; 
     rootFrame.GoBack(); 
    } 
    //you can check for this here rootFrame.BackStack[rootFrame.BackStack.Count-1].SourcePageType.Name 

} 

また、あなたがページをチェックして、このようなデスクトップアプリでバックボタンの可視性を制御し、

private void OnNavigated(object sender, NavigationEventArgs e) 
    { 
     // Each time a navigation event occurs, update the Back button's visibility 
     Frame rootFrame = (Frame)sender; 
     if (rootFrame.BackStack != null && rootFrame.BackStack.Count == 1) 
     { 
      // take care in page names 
      if (rootFrame.BackStack[0].SourcePageType.Name == "MainPage" 
       || rootFrame.BackStack[0].SourcePageType.Name == "AnyOtherPage") 
      { 
       rootFrame.BackStack.RemoveAt(0); 
      } 
     } 

     SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = 
      ((Frame)sender).CanGoBack ? 
      AppViewBackButtonVisibility.Visible : 
      AppViewBackButtonVisibility.Collapsed; 
    } 
ことができ、このメソッドを書きます
関連する問題