Con la beta 2 de WinFX y las extensiones para desarrollar con Visual Studio 2005 (incluso las versiones Express) podemos diseñar formularios que internamente usan XAML, sin necesidad de tener que usar el Microsoft Expression Interactive Designer.
Publicado el 31/May/2006
Actualizado el 12/Ago/2006
Autor: Guillermo 'guille' SomNota del 12/Ago/2006:
Si estás usando el CTP de Julio de .NET Framework 3.0, y no tienes proyectos del tipo WinFX o quieres saber que necesitas para instalar el CTP de Junio o de Julio, léete esto.
Nota del 03/Ago/06:
Estas pruebas (y todo lo comentado en este artículo) están basadas en las betas que había en Mayo de 2006, y con toda seguridad no funciona con las beta de Julio 2006 CTP.
Introducción o la batallita del agüelo:
Pues estaba yo el otro día comentando con (no recuerdo ahora quién, creo que con Adolfo Wiernik en Costa Rica) de que todo el tema del lenguaje XAML ese que nos permite crear aplicaciones gráficas en el futuro sistema de Windows (Windows Vista) y en los Windows XP y 2003 si tenemos instalado el runtime de WinFX usando código parecido a HTML, XML e incluso ASPX (es decir, mediante tags), está muy bien, pero hasta que no saliese la nueva versión de Visual Studio Orcas (el que sustituirá al actual Visual Studio 2005) y ésta permitiera el diseño de formularios que internamente usara XAML, pues que no me pondría a "aprenderlo", pero... no he tenido que esperar tanto.
Sigo con mi "batallita".
Cuando me fui a hacer la gira de Ineta 2006 por Centroamérica, el Caribe y México, me llevé preparada una máquina virtual para instalar el Microsoft Expression Web Designer que acababa de bajarme después de que me aceptaran entre los 5000 primeros que solicitamos la beta, y mi intención fue instalarla mientras estaba de gira. El día que me decidí a hacerlo, (aprovechando que el hotel tenía una conexión rápida por si tenía que bajar alguna cosa más), resulta que me di cuenta de que no había copiado todos los "instaladores" que necesitaba, así que me puse a bajar (realmente a intentar bajar) los ficheros que necesitaba, pero el Expression Web Designer no se dejaba, siempre daba error al intentarlo, así que tuve que dejarlo para otro momento. Ese momento llegó, (creo que el día 21 de Mayo, fecha de España que es la que tengo en mi portátil, 20 de Mayo en México), así que me puse a bajar todo lo relacionado con WinFX: el runtime de WinFX para x86, el giga y pico de el SDK de WinFX, el Windows Workflow Foundation Runtime, las extensiones del Workflow para VS2005 y el "Orcas" WinFX Development Tools, además de los tres productos de la serie Expression: el Web Designer, el Interactive Designer y el Graphic Designer.
Pero como resulta que era mucho lo que había que bajar, y a pesar de los ciento y pico kbps de la conexión, tuve que dejarlo para otro día. Y ese día casi llegó, ya que la madrugada del 24 de Mayo, (la mañana del 23 en México) me volví a conectar a la página de WinFX y ví que había una nueva versión: la beta 2, así que... me dije, que mejor probarlo con lo último que con lo que ya tenía, así que... a bajar de nuevo todas las cosas relacionadas con el WinFX (sí, otro giga del SDK).
Total que ya no me dio tiempo a instalarlo hasta ayer día 30 de mayo, y me puse a juguetear un rato (como si no tuviera otras cosas que hacer, como terminar mi libro de Visual Basic 2005, escribir un artículo para dotNetManía o preparar la charla para el Summit de Solid Quality Learning, entre otros).
Mi primera prueba con el Expression Interactive Designer
Total que empecé a usar el Expression Interactive Designer, creé un típico "formulario" en el que podía escribir un nombre en una caja de textos y por medio de un botón mostrar un "Hola, <nombre>".
Como no encontraba la forma de asignar al botón un evento, abrí el Visual Studio 2005 Profesional y cargué el proyecto que previamente había creado con el Interactive Designer, ver figura 1, (que por cierto lo creó sin preguntarme nada en C#).
Figura 1. Expression Interactive Designer en modo diseño
Al principio tuve problemas para asignar los eventos a los controles, ya que ni desde el Interactive Designer ni desde el Visual Studio 2005 se puede hacer el "típico" doble click en el botón para que te mostrara el código del evento "click".
Así que tuve que jugar con las propiedades del código XAML y me encontré con el atributo Click, con el que podemos indicar el método que se ejecutará al pulsar en el control.El problema también fue que al irme al código de la aplicación y usar this seguido de un punto, el IntelliSense no me mostraba los controles del "formulario", y eso ya empezó a decepcionarme un poco... tampoco encontraba la forma de crear el método del evento, salvo escribiéndolo "a pelo", menos mal que a pesar de todo, conozco el lenguaje C#, así que no me costó definirlo, y escribir el código, pero como te comentaba, los controles no los reconocía.
Se me ocurrió guardar el proyecto y darle a generar, y... ¡magia potagia! aparecieron los controles por medio de Intellisense.
Pero como el "proyecto" no era en realidad un formulario de Windows, sino una "escena", me encontré que el botón de "salir" no funciona, pero si el de "Saluda", que sería el encargado de mostrar el saludo en la otra etiqueta.
El primero proyecto de WinFX Windows Application
Figura 2. Crear un nuevo proyecto de WinFX Windows Application
Visto lo visto, y como me gusta más el Visual Basic, me creé un nuevo proyecto del tipo WinFX Windows Application (ver figura 2), el que "se suponía" que podría interactuar con el usuario de la misma forma que con una aplicación de Windows normal y corriente, y así fue.
Añadí los controles que quería usar, (ver la figura 3), casi siempre hago la primera prueba de aplicaciones de Windows usando una caja de textos, un listbox y un par de botones, todo ello para poder comprobar como se seleccionan los elementos de un listbox, cómo se recupera el elemento seleccionado y se eliminan los seleccionados al pulsar la tecla suprimir, además de poder añadir nuevos elementos, etc., esto es simple, lo se, pero cuando estás trabajando con un lenguaje como C++, pues no es tan fácil para un pobre torpe que usa el VB.
Figura 3. Un formulario de WinFX con colorines en ejecución
Pero me encontré con el mismo problema que comenté antes, no había forma de poder trabajar con los controles del formulario desde código, incluso creé los eventos manualmente, asignando el nombre del método al atributo Click del botón, etc.
Así que hice lo que te comenté: Guardé el proyecto y lo generé, por supuesto me dio error al encontrarse con los parámetros "típicos" de un evento Click, en el que el segundo parámetro es de tipo EventArgs, ya que me dijo que ese formato no se corresponde con el delegado... así que... probé con la lista desplegable de la izquierda (en la que están los controles) y como vi que ahora estaban los controles del formulario, utilicé la lista de la derecha (la de los eventos) y al seleccionar el evento Click, me di cuenta que ese segundo parámetro debía ser del tipo RoutedEventArgs y que en el WinFX seguía funcionado lo de usar Handles control.evento que el IDE de Visual Studio 2005 nos proporciona a los torpes de VB, así que... ¡problema solucionado! (cada día me arrepiento menos de ser un torpe desarrollador que prefiere usar el Visual Basic, je, je).
Colorines por todos lados
Debido a que en las demos de WinFX (o de XAML) que había visto que se usaban controles con colores degradados y esas cosas, y en vista de que desde el Visual Studio 2005 no encontraba una forma fácil, (salvo modificar el código XAML), decidí abrir el proyecto desde el Expression Interactive Designer, y desde allí si que me resultó fácil (ver figura 4).
Figura 4. El proyecto creado en Visual Studio 2005 "coloreado" desde el Interactive Designer
Incluso para asignarle colorines a los controles además de al formulario (que por cierto, hasta que no está en ejecución, ver figura 3, no lo muestra).
Sin embargo al volver a abrirlo desde Visual Studio 2005, si que se veía el color de fondo del formulario (ver figura 5).
Figura 5. Modo diseño desde Visual Studio 2005 en el que se ven todos los colores usados
Ya sabiendo cómo funcionaba todo el tema de que "se enterara" de los controles que tenía el formulario, y sobre todo con la ayuda que Visual Studio 2005 nos da a la gente de VB, fue fácil crear todos los métodos de evento que quería usar.
En este tipo de aplicaciones, si que se reconoce el método Close del objeto Me (la instancia actual), por tanto si que pude "cerrar" el formulario desde un botón (como es costumbre), tal como puedes ver en la figura 6.
Figura 6. El código fuente del formulario de prueba
Por supuesto, todo el código que genera el diseñador de Visual Studio 2005 con las extensiones para WinFX es en XAML, tal como puedes ver en la figura 7.
Figura 7. Todos los controles de una aplicación WinFX se crean usando XAML
De colorines y otras monerías...
Como puedes comprobar, incluso a mi que esto de usar tantos "colorines" en las aplicaciones no me gusta mucho, he usado una de las "novedades" que nos ofrece el WinFX o el XAML para crear formularios y controles llamativos... esperemos que este tipo de aplicaciones "coloreadas" no abunden mucho, ya que sino... en fin...
Pero... mi excusa, es que así llama más la atención, ¿verdad?
Bueno, esto ha sido todo para esta primera inclusión con el WinFX y los nuevos formularios basados en XAML, por supuesto, que puedes usar otras técnicas y no todo va a ser para darle muchos colores o poder mover los controles en cualquier dirección, (ver figura 8), ya que la verdad es que aunque se pueda, no se si el usuario final se encontrará a gusto con una aplicación en la que le cueste trabajar... ¿o no?
Figura 8. Podemos hacer cualquier cosa con XAML
Bueno, hay usuarios para todos los gustos... o como se suele decir, y también aplicable a los usuarios y programadores: sobre gustos... hay de todo, como en botica.
Aunque en algunos casos, disponer de estas posibilidades "graficas" y usándolas de forma adecuada, podemos darle más vida a nuestras "monótonas" aplicaciones de Windows (e incluso Web). La cuestión es saber aprovechar esas características.
Que lo renderices bien.
Nos vemos.
Guillermo