サーチ…


前書き

アプリケーションに複数のページ/画面が表示されるとすぐに、その間をナビゲートする方法が必要です。 UWPアプリケーションの場合、ナビゲーションは[Frame] [1]コントロールで処理されます。 [Page] [2]インスタンスを表示し、新しいページへのナビゲーションをサポートし、前後のナビゲーションの両方の履歴を保持する[1]:https://msdn.microsoft.com/en-us/library/windows/apps/ windows.ui.xaml.controls.frame.aspx [2]:https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.page.aspx

フレームを作成する

他のコントロールと同様にフレームが作成されます。

<Frame x:Name="contentRoot"
       Navigated="OnNavigated"
       Navigating="OnNavigating" />

ナビゲートされた/ナビゲートしているイベントをインターセプトして、ナビゲーションをキャンセルしたり、戻るボタンを表示/非表示にすることができます。

private void OnNavigating(object sender, NavigatingCancelEventArgs e)
{
    if(contentRoot.SourcePageType  == e.SourcePageType && m_currentPageParameter == e.Parameter)
   {
       // we are navigating again to the current page, we cancel the navigation
       e.Cancel    = true;
   }
}

private void OnNavigated(object sender, NavigationEventArgs e)
{
    // user has navigated to a newest page, we check if we can go back and show the back button if needed.
    // we can also alter the backstack navigation history if needed
    SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = (contentRoot.CanGoBack ? AppViewBackButtonVisibility.Visible : AppViewBackButtonVisibility.Collapsed);  
}

最新のページに移動する

最新のページに移動するには、フレームからNavigate()メソッドを使用できます。

contentRoot.Navigate(typeof(MyPage), parameter);

ここで、 contentRootFrameインスタンスであり、 MyPagePageを継承するコントロールです

MyPageでは、ナビゲーションが完了すると(つまり、ユーザーがページを入力するとOnNavigatedTo()メソッドが呼び出され、ページデータの読み込みを開始または完了させることができます。 OnNavigatedFrom()メソッドは、ページを離れるときに解放されなければならないものを解放するために呼び出されます。

public class MyPage : Page
{
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        // the page is now the current page of the application. We can finalized the loading of the data to display
    }

    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        // our page will be removed from the screen, we release what has to be released
    }
}

OnNavigatingFromを使用したナビゲーションリクエストの確認

private bool navigateFlag = false;

protected async override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
    base.OnNavigatingFrom(e);

    if (!navigateFlag)
        {
            e.Cancel = true;

            var dialog = new MessageDialog("Navigate away?", Confir,);
            dialog.Commands.Add(new UICommand("Yes", null, 0));
            dialog.Commands.Add(new UICommand("No", null, 1);

            dialog.CancelCommandIndex = 1;
            dialog.DefaultCommandIndex = 0;

            var result = await dialog.ShowAsync();

            if (Convert.ToInt16(result.Id) != 1)
            {
                navigateFlag= true;
                this.Frame.Navigate(e.SourcePageType);
            }
           
        }

    }


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow