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:

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:
Muy buena entrada!
Se agradece buen material paso a paso de WinRT.
muy interesante! Trabajar con diferentes ventanas puede simplificar la vida, no?
Algo para Geobrugg?
Un cordial saludo
Matthias