Buscar..


Introducción

Una vez que la aplicación tenga varias páginas / pantallas, se necesita una forma de navegar entre ellas. Con las aplicaciones UWP, la navegación es manejada por el control [Frame] [1]. Muestra las instancias de [Página] [2], admite la navegación a nuevas páginas y mantiene un historial para la navegación hacia atrás y hacia adelante [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

Crear marco

Un marco se crea como cualquier otro control:

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

Los eventos de navegación / navegación pueden ser interceptados para cancelar la navegación o mostrar / ocultar el botón de retroceso.

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

Para navegar a una página más nueva, podemos usar el método Navigate () desde el marco.

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

donde contentRoot es la instancia de Frame y MyPage un control heredado de Page

En MyPage , se llamará al método OnNavigatedTo () una vez que se complete la navegación (es decir, cuando el usuario ingresará a la página), lo que nos permitirá activar o finalizar la carga de los datos de la página. Se llamará al método OnNavigatedFrom () cuando salga de la página, lo que nos permite liberar lo que se debe liberar.

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

Confirmando la solicitud de navegación usando 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow