Recherche…


Introduction

Dès que l'application dispose de plusieurs pages / écrans, une manière de naviguer entre eux est nécessaire. Avec les applications UWP, la navigation est gérée par le contrôle [Frame] [1]. Il affiche les instances de [Page] [2], prend en charge la navigation vers de nouvelles pages et conserve un historique à la fois pour la navigation en arrière et en avant [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

Créer un cadre

Un cadre est créé comme tous les autres contrôles:

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

Les événements de navigation / de navigation peuvent alors être interceptés pour annuler la navigation ou afficher / masquer le bouton de retour.

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);  
}

Pour naviguer vers une page plus récente, nous pouvons utiliser la méthode Navigate () à partir du cadre.

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

contentRoot est l'instance Frame et MyPage un contrôle héritant de Page

Dans MyPage , la méthode OnNavigatedTo () sera appelée une fois la navigation terminée (c’est-à-dire lorsque l’utilisateur entrera dans la page), ce qui nous permettra de déclencher ou de finaliser le chargement des données de la page. La méthode OnNavigatedFrom () sera appelée en quittant la page, ce qui nous permettra de libérer ce qui doit être publié.

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
    }
}

Confirmation de la demande de navigation avec 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow