Framework de Navegación en Silverlight 3
** Post compatible con la versión Silverlight 3 RTW **
En los siguientes posts estaré platicando del nuevo Framework de Navegación introducido en la version 3 de Silverlight. La idea es ir platicando a detalle sobre las caracteristicas de framework, y poco a poco iremos creando una aplicación cada vez más robusta basada en este concepto.
Qué es el Framwork de Navegación en SL3?
Es una de las caracteriticas introducidas en Silverlight 3 (todavia en beta) que nos permite inscrustar ‘frames’ dentro de nuestos xaml y permitir a las ‘paginas’ contenidad en estos frames conta con URL´s unicos, que a su vez sean amigables para los ‘motores de busquedas’.
Así pues, podemos hacer referencia a una sola parte de nuestra applicación web, llamadas pages, usando url´s del tipo: http://www.domino.com/page.html#home; en donde la parte a notar, dentro de este concepto, es #home, que le indica a la aplicación que información debe de mostrar (más adelante explicaremos con mayor detalle este punto)
Configurar una aplicacion SL3 para usar el framework
Para poder utilizar el framework de navegación en nuestros proyectos es necesario agregar la referencia System.Windows.Controls.Navigation a nuestro proyecto (incluida en las librerias de SL3).
Y como ya es bien sabido, debemos agregar nuestra referencia en nuestro archivo xaml.
Codificando
Una vez que hemos preparado nuestra solución para usar el framework de navegación podemos comenzar a codificar nuestra applicación. Lo primero que haremos es crear el menu de navegación con los tipicos menus de Inicio y Acerca, además agregaremos una opción de Clientes que nos servirán en los siguientes post (por ahora no le daremos funcionalidad a esta opción).
Una vez agregado el menú, comenzaremos a utilizar elementos del framework comenzando por poner un ‘frame’.
1: <Grid x:Name="LayoutRoot">
2: <Grid.ColumnDefinitions>
3: <ColumnDefinition Width="0.20*"/>
4: <ColumnDefinition Width="0.80*"/>
5: </Grid.ColumnDefinitions>
6: <StackPanel Margin="8,8,8,8" VerticalAlignment="Top">
7: <HyperlinkButton Content="Inicio"/>
8: <HyperlinkButton Content="Acerca"/>
9: <HyperlinkButton Content="Clientes"/>
10: </StackPanel>
11: <nav:Frame x:Name="MainFrame" Grid.Column="1" />
12: </Grid>
*Yo he decidido poner este par de bloques (menu y frame) en un Grid, pero cada quien podrá hacerlo como más le guste.
Ya que hemos definido nuestro espacio de trabajo principal, agregaremos un par de archivos xaml a nuestra solución en donde se definirá el contenido de cada una de la opciones del menu, los cuales son llamados ‘paginas (pages en ingles)’. La sugerencia es ponerlos en una carpeta especial para este tipo de archivos xaml. En este paso, utilizaremos una de los elementos contenido en las platillas para el compomente de control de navegación llamada ‘Silverlight Page’
Y nuestra solución se vera así:
Principales caracteristicas que nuestros archivos xaml para nuestras ‘pages’:
- El tag principal del archivo debe de ser: navigation:Page
- Dentro del tag principal, el contenido del atributo Title será el titulo que el navegador mostrará para la página.
- Una vez mas, el tag principal tiene que hacer referencia a nuestro esamblado de Navegación.
- El contenido de nuestro xaml será lo que se muestre en nuestro frame de nuestro xaml principal.
1: <navigation:Page x:Class="Silverlight3.NavigationFramework.Contents.Inicio"
2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4: xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
5: Title="SL3 Framework de Navegación.- Página principal">
6: <Grid x:Name="LayoutRoot" Background="White">
7: <TextBlock Text="Página principal" FontSize="24" />
8: </Grid>
9: </navigation:Page>
Ahora bien, una vez que tenemos todos nuestros elementos listo, podemos pasar a la parte programativa, que será la encargada de hacer funcionar el framework y el paso entre páginas.
Hasta aquí, es decir para este ejemplo, la forma en que navegaremos es cargando las páginas de contenido en nuestro frame de nuestra xaml principal usando los eventos de click de nuestros HiperlinkButtons de nuestro menú. Los tres eventos apuntaran hacia la misma función evitando así reescribir código inecesariamente. Ademas agregaremos un atributo de ‘Tag’ a cada uno de las opciones de menú para diferenciar hacia que ‘pagina’ apuntará nuestra applicación.
1: <HyperlinkButton Content="Inicio" Click="NavigateButton_Click" Tag="/Contents/Home.xaml" />
2: <HyperlinkButton Content="Acerca" Click="NavigateButton_Click" Tag="/Contents/About.xaml" />
Y en nuestra función a la que apunta nuestro even handler, en este caso NavigateButton_Click, definiremos un HyperlinkButton para leer nuestro sender, así como un string para definir el url del contenido. Y la parte que corresponde al framework de navegación que es apuntar la propiedad de ‘Navigate’ de nuestro frame hacia la nueva url.
1: private void NavigateButton_Click(object sender, RoutedEventArgs e)
2: {
3: HyperlinkButton btn = sender as HyperlinkButton;
4: string url = btn.Tag.ToString();
5:
6: this.MainFrame.Navigate(new Uri(url, UriKind.Relative));
7: }
Y listo, tenemos nuestra primera aplicación que utiliza el framework de navegación.
Tiempo de ejecución
La forma de acceder a una aplicación con framework de navegación es como la usual, hacemos la llamada a nuestra página web donde esta montado el xap:
http://ligasilverlight.jorgelevy.com/Silverlight3.NavigationFramework.Part1TestPage.html
Pero si queremos ingresar directamente a una ‘página’ de nuestra aplicación, podemos utilizar url del tipo:
Donde encontrar este código:
KodiakLS.codeplex.com (I’m in love with codeplex.com)
Proximamente:
- Como modificar el url para uso de nombres mas amigables
- Como cargar información dependiendo de parametros en el url
- Plantilla de projecto para el framework de navegación.
- Etc…
Es decir, el tema da para mucho…
Saludos.





[...] parte del tema de Framework de Navegación en Silverlight 3. Si no has leido la primera parte, aquí la puedes encontrar. También mencionar que utilizaremos el proyecto/código que hicimos en dicho [...]
[...] Framework de Navegación [...]
[...] Framework de Navegación [...]
[...] Framework de Navegación [...]
[...] Framework de Navegacion en Silverlight 3.- Parte 1 Framework de Navegacion en Silverlight 3.- Parte 2 [...]
[...] del tema de Framework de Navegación en Silverlight 3. Si no has leido la primera parte, aquí la puedes encontrar. También mencionar que utilizaremos el proyecto/código que [...]
Una vez que navego hacia una pagina pierdo el estado de la página en la que estoy? es decir, si cargo la página home, escribo en un textbox, navego hacia el about y vuelvo al home, pierdo el texto que tengo cargado?