Ahora que me encuentro en pleno aprendizaje de Silverlight y su editor gráfico, es decir Expression Blend, me estoy enfrentando a un mundo nuevo (aunque realmente no sea tan nuevo) con muchas cosas por ver y aprender.
Una de las cosas que me ha sorprendido a la hora de desarrollar con Visual Studio – Blend, es la dualidad que aparece ahora, y de la cual nos podemos beneficiar a la hora de crear las interfaces de usuario que consideremos pertinente. Que exista esta dualidad y podemos trabajamos con el xaml desde diferentes entornos es beneficioso, ya que así cada uno puede decidir cuál es el entorno que más le satisface para crear unas tareas x, por lo tanto, trabajamos más a gusto y a la larga es mejor.
Eso sí, al existir esta dualidad de “ides”, nos vamos a encontrar con casos un poquito peculiares, por ejemplo, el que hoy nos trae aquí.
Para aprender una nueva tecnología, no hay nada como verse inmerso en un proyecto, donde tengas unos tiempos que cumplir, una funcionalidad que realizar con una calidad x, tengas que trabajar con distintas tecnologías simultáneamente, implementar n patrones etc. Así pues, revise las aplicaciones que tenemos (en la compañía donde trabajo), y decidí que una aplicación interesante para realizar con silverlight, sería la biblioteca (app que gestiona la adquisición y préstamo de libros teckies), ya que hay que acceder a una db para coger la información, tratar esta información etc. y además le daba una vuelta a una app que hacía años nadie tocaba.
Tras decidir que el codename de la aplicación sería Booklight, comencé a diseñar la interfaz. Tras hacer un diseño (grafico y de interacción) con Fireworks (no lo hice con Blend porque no hay que olvidarse de que el propósito de este desarrollo era aprender) y pensar en cómo podía orientar la arquitectura de esta aplicación, abrí Blend y comencé a plasmar el diseño realizado con Fireworks en Expression Blend. Realice la interfaz y empecé a codificar el asunto, llamadas a servicios wcf, acceso a base de datos, implementación model view viewmodel (del que hablaremos en su momento) y llego un momento que al abrir mi Expression Blend, me encontraba con un error que decía algo así como:
Argument Null Exception: Value cannot be null.
Parameter name:stream

Argument null exception. Value cannot be null.
Me resulto muy curioso, ya que yo podía hacer un rebuild en Visual Studio y todo estaba ok, pero en Blend seguía el error.
Tras buscar un tiempo en google, descubrí que en tiempo de diseño, se pueden producir excepciones.
En mi caso, en el constructor de una clase, estaba haciendo una llamada asíncrona a un servicio, y como es natural, Blend, no podía ejecutar la llamada.
Para solucionarlo, tan sencillo como comprobar si nuestro cliente rico, está hospedado en un navegador.
El código necesario para esto, el siguiente:
HtmlPage.IsEnabled
Con esta pequeña funcionalidad, evitaremos este tipo de errores y algún que otro quebradero de cabeza, y cuando abramos nuestro Blend, lo que veremos sera lo que hay que ver, en mi caso, aqui teneís:

interfaz en la que hay que trabajar
Ahora quizá deberíamos debatir sobre si Expression Blend tiene que mostrar excepciones o no, pero creo que será en otro momento, aunque os adelante que a mi parecer, Blend debería dedicarse únicamente a ayudarnos a plasmar toda nuestra creatividad en un medio digital. En Flash (durante 2 años desarrolle con Action Script), esto está mejor resuelto, aunque también es verdad que el tratamiento de excepciones de flash (yo me quede en Flash 2.0, cuando comenzaron a orientarlo a objetos) era un poquito pobre.
Nada más amigos, es Agosto y debería estar de vacaciones y la verdad no se qué hago aquí. De momento, vamos con los más grandes del 2 tone.