Navegación entre páginas con Metro en C#

Salvo que estemos desarrollando una aplicación tremendamente sencilla, siempre tendremos la necesidad de cambiar entre diferentes ventanas de la misma. En este artículo hablaremos de navegación entre diferentes páginas de una misma aplicación Metro.

Introducción

Las aplicaciones en Windows 8 se caracterizan por tener una única pantalla mostrándose cada vez, siguiendo el estilo Metro, esto no implica que nuestras aplicaciones tengan que tener solamente una página, sino que tendremos que contar con un flujo de navegación, como muestra la siguiente imagen:

Flujo de navegación en una aplicación Metro

Flujo de navegación en una aplicación Metro

La primera idea de cómo ocurre la navegación la vemos en el proceso principal que carga la misma (situado en App.xaml.cs) y que contiene el método OnLaunched, que establece la página principal. Se genera una primera instancia del marco principal (Frame), y mediante este marco se navega a una nueva página, que es del tipo BasicPage1, que es la que se solicita en este caso como página principal.

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    // Create a Frame to act navigation context and navigate to the first page
    var rootFrame = new Frame();
    rootFrame.Navigate(typeof(BasicPage1));

    // Place the frame in the current window and ensure that it is active
    Window.Current.Content = rootFrame;
    Window.Current.Activate();
}

Para realizar la navegación entre varias ventanas de una aplicación se podrá reusar parte de este código, como muestra la siguiente línea, que se puede introducir dentro del cuerpo de cualquier función como resultado de la acción de un botón, por ejemplo.

    this.Frame.Navigate(typeof(Page2));

Al ejecutarse esta función, se selecciona la página actual, seguidamente se recupera el Frame correspondiente (que hemos visto cómo se creaba anteriormente) a partir del cual se navega a otra página, en este caso definida como Page2.xaml.

Entrada y salida en las páginas

Al igual que con Windows Phone (como comentábamos en este artículo), al navegar hacia o desde una página se ejecutan los comandos:

  • OnNavigatedTo (al convertirse en la página en primer plano)
  • OnNavigatedFrom (al abandonar el primer plano)

Este método nos puede ser de utilidad para realizar carga de datos, o para guardar el contexto actual al abandonar la misma.

Parámetros

Otra de las características de la navegación entre las diferentes páginas de Windows 8, es que permite el paso de parámetros de una manera bastante más sofisticada que la que comentábamos anteriormente con Windows Phone 7, y es que permite pasar, como parámetros, cualquier clase de objeto, como se muestra en los siguientes ejemplos:

Página origen, se pasa como parámetro una cadena de texto:

    this.Frame.Navigate(typeof(OtraPagina),"Estamos pasando un texto");

Página destino, se recupera el parámetro enviado y se hace un casting a string para operarlo como cadena.

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    string name = e.Parameter as string;
}

Conclusiones

La navegación entre páginas en una aplicación Metro nos proporciona una capa más de abstracción para el desarrollo de Software, de la misma manera que se nos proporcionaba con Windows Phone. Podemos además agregar opciones de navegación como Back, Home y similares, que se proporcionan con las plantillas incluidas en Visual Studio 11 Express for Windows Phone.

Más información

En MSDN:

3 pensamientos en “Navegación entre páginas con Metro en C#

  1. Matthias Denk

    muy interesante! Trabajar con diferentes ventanas puede simplificar la vida, no?
    Algo para Geobrugg?
    Un cordial saludo
    Matthias

    Responder
  2. Pingback: WinRT. Navegación. | Javier Suárez Ruiz | Blog

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s