Este es el último de los ocho tutoriales en el que estamos creando un cliente de Digg con la Beta 1 de Silverlight 2. La idea es que estos tutoriales se lean en orden, con el objetivo de explicar los fundamentos de la programación con Silverlight.
Podéis descargar el código completo del cliente Digg del ejemplo aquí
Crear una aplicación de escritorio con WPF
El objetivo con este último tutorial es un poco diferente del de los otros siete. No vamos a usar Silverlight en este post – sino que usaremos WPF y .NET 3.5. Cojeremos el código de la aplicación que estamos creando con Silverlight y lo reutilizaremos como una aplicación de escritorio.
Silverlight viene con un subconjunto compatible de la API del .NET Framework. Uno de los objetivos de esto es permitir a los desarrolladores aprender un mismo modelo de programación que les permita reusar código y contenido rico, tanto para la web como para aplicaciones escritorio.
Aquí tenéis los pasos que he hecho para convertir la aplicación Silverlight que hemos creado (que se ejecuta en un navegador) en una aplicación de escritorio Windows (que no se ejecuta en el navegador).
Paso 1: Crear una nueva aplicación WPF de escritorio
Empezamos creando una nueva aplicación WPF con VS 2008. La llamaremos “DiggDescktopSample”:
Esto creará un proyecto en VS con dos archivos – un App.xaml y un Window.xaml:
Paso 2: Copiar el código existente en la aplicación WPF
Copiaremos y pegaremos el código que ya tenemos en Silverlight en nuestro nuevo proyecto:
En la Beta1 esta parte de copiar y pegar es un paso manual – estamos viendo la posibilidad de tener una forma más automática de hacer esto.
Paso 3: Corregir un par de cositas
He tenido que hacer dos cambios para que nuestro código compile:
1) El esquema de Silverlight Beta1 xmlns: la url es diferente de la versión de WPF. He tenido que corregir esto en los archivos XAML que hemos copiado en el proyecto para que apunten al esquema de WPF. Esto es algo que estamos mejorando antes de publicarlo.
2) He tenido que cambiar el control <WaterMarkTextbox> a un <TextBox> y cambiar el control <HyperlinkButton> para que sea un <TextBlock>. Estos dos controles son nuevos en la Beta 1 de Silverlight y no están aún en WPF (los añadiremos en futuras versiones). No tengo que cambiar ningún código para que funcione con estos controles, ni siquiera la red, LINQ to XML, ni el código de enlace a la base de datos.
Una vez que hemos hecho estos cambios, el código se compila sin ningún problema.
Paso 4: Hosting de la aplicación en una ventana
Entonces abrí el archivo Windows1.xaml en el proyecto de escritorio (que es la ventana que se carga por defecto cuando arranca la aplicación).
Acutalizé el titulo de la ventana a “Digg Desktop Version” y aumenté el Width y el Height de la ventana.
Luego añadí nuestro user control Page.xaml del proyecto de Silverlight como el control raíz de la ventana. Esto hará que sea visible y que se cargue cuando se cargue la ventana. No tengo que cambiar ningún código de la clase Page ni renombrar nada. Como hereda de la clase UserControl puede hostearse dentro de cualquier ventana o control WPF.
Lo último que he tenido que cambiar una cosilla debido a que el servidor de la api de Digg detecta cuando un cliente no es un navegador y algunas veces le deniega el acceso (probablemente para evitar scripts automáticos accedan a su servicio). Esto lo resolví a través de una url de proxy (sin cambiar código, sólo un cambio de url).
Paso 5: Ejecutar la aplicación
Ya estamos listos para ejecutar la aplicación de Windows. Funciona todo exactamente igual que con la versión de silverlight:
Y cuando seleccionamos un elemento de la lista, vemos los detalles:
Hay un par de diferencias cosméticas entre la versión del navegador y la de escritorio. Esto es porque WPF hereda todos los estilos por defecto (fuentes, colores, scroll bars, etc) basándose en el tema de escritorio del sistema operativo que está seleccionado, mientras que Silverlight tiene un tema por defecto que usamos en todos los sistemas operativos. Si queremos que las versiones de escritorio y la web sean el mismo podemos conseguirlo siendo explícitos en nuestros estilos y en los templates de los controles – de otra manera la versión de escritorio se adaptará al tema del usuario.
Resumen
Pronto tendremos algunas notas y sugerencias de buenas prácticas a la hora de compartir código entre aplicaciones Silverlight y WPF más adelante. Creo que habéis encontrado las características necesarias para crear aplicaciones Silverlight y que es muy sencillo pasarlo a proyectos WPF. También estamos trabajando en que haya una mayor compatibilidad entre este tipo de aplicaciones para que permitir la reutilización de código entre soluciones, controles, contenido y código fácilmente.
Espero que sirva
Scott.
Traducido por: Juan María Laó Ramos.
2 thoughts on “Parte 8: Crear la versión de escritorio con WPF”