Web Casts: Silverlight 2 y 3 para Desarrolladores y Diseñadores

Curso gratis de Silverlight 3

Serie de tres Web Casts: Silverlight 2 y Silverlight 3 para Desarrolladores (y Diseñadores ;) )

SL3BetaPromo

¿Quieres saber qué tiene Silverlight para ti y tus aplicaciones?

¿Tienes dudas acerca de esta tecnología?

¿Quieres de una vez por todas adentrarte en esta tecnología de una manera rápida, práctica y divertida?

Los invito cordialmente a que asistan a una serie de Web Casts de entrenamiento gratuito acerca de Silverlight 2 y Silverlight 3 Beta 1.  En estos Web Casts platicaremos acerca de Silverlight como plataforma de desarrollo usando las nuevas características de la plataforma:  Silverlight 3 Beta 1 anunciado por Microsoft hace algunas semanas en el MIX09; aunque claro está, también utilizaremos Silverlight 2 para que aprecien lo que tienen a su alcance hoy en día!

Estos Web Casts son de unos 10 minutos de teoría y el resto de puro código, :)así que se los recomiendo ampliamente.

El entrenamiento es totalmente gratis, con una duración aproximada de 3 1/2 horas (sumando los tres días)

Fechas

11 al 13 de Mayo a las 5:00pm Hora de Guadalajara/Monterrey/Ciudad de México

Registro

http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032414027&EventCategory=2&culture=es-MX&CountryCode=MX

3 días… 3 horas…  Silverlight 3 :)

Me daría mucho gusto que estén presentes, así que los(as) espero!!!

UPDATE 20 de Mayo 2009

Los Web Casts los pueden descargar de las siguientes ligas:

Silverlight Tour Workshop – Guadalajara

El Curso que Ha Dado La Vuelta Al Mundo Regresa a Guadalajara

La próxima semana regresa el Silverlight Tour Workshop en Español a la tapatía ciudad de Guadalajara, Jalisco, México… y actualizado a Silverlight 3 Beta 1.  Si quieres aprender a desarrollar con Silverlight 2 y 3 este es el entrenamiento para ti!

El Silverlight Tour Workshop es un curso de capacitación en español de tres días de alta profundidad técnica acerca de Silverlight 2 y 3. El curso se imparte en varios idiomas en diferentes países en todo el Mundo.

Los lugares casi se agotan así que regístrate ya!!!

Silverlight 3 Beta 1: Enlace entre Elementos

Silverlight 3 Beta 1: Enlace entre Elementos

El enlace entre elementos (Element Binding), presente en WPF, es una de las nuevas características que podemos encontrar en Silverlight 3 Beta 1 y que nos brinda una mayor potencia al crear nuestras aplicaciones en esta plataforma, ya que permite hacer atado de propiedades (binding) de manera directa entre elementos, sin tener que utilizar code-behind o alguna clase intermediario que controle esta relación (similar a lo que sucede con un ViewModel en el patrón MVVM).

Propiedad ElementName

El enlace entre elementos es logrado a través de la propiedad ElementName de la clase Binding.  En esta propiedad indicamos el nombre del elemento al que nos queremos atar, y complementamos el atado usando Path para indicar el nombre de la propiedad a la que nos queremos atar.

El siguiente fragmento de código muestra una implementación sencilla de esta característica:

En el código podemos observar un rectángulo, el cual su propiedad Width está enlazada con la propiedad Value del Slider llamado slider.  La extensión Binding hace uso de Path y ElementName (de hecho, podríamos quitar la invocación de “Path=” ya que precisamente es la propiedad por default).

La siguiente figura muestra esta sencilla aplicación en ejecución:

Un buen ejemplo: Enlace entre datos para controles maestro – detalle

Un lugar donde es benéfico utilizar esta característica es en las aplicaciones que tengan controles que muestren datos maestro – detalle.  Tal es el caso por ejemplo de una lista de datos, que al darle clic nos despliegue el detalle de ese elemento seleccionado en diferentes tipos de controles.

Veamos el siguiente ejemplo: una aplicación que muestra en un ListBox una lista de personas, y al darle clic en alguna de ellas se muestra el resto de datos en controles específicos:

Típicamente con Silverlight 2 tendríamos que crear un manejador para el evento SelectionChanged del ListBox, obtener el elemento seleccionado y establecerlo como DataContext del contenedor de los controles del detalle, es decir, algo similar a esto:

Ahora con esta característica de Enlace o Atado entre Elementos en Silverlight 3 Beta 1 podemos establecer dicha relación de manera declarativa:

Como podrán observar, la propiedad DataContext se está enlazando al elemento seleccionado (propiedad SelectedItem) del ListBox.

Resumen

El Enlace entre Elementos o Element Binding, existente en WPF e incorporado en Silverlight 3 Beta 1 nos permite establecer relación entre elementos de manera declarativa, ahorrándonos código en el code-behind de nuestras aplicaciones logrando así código más sencillo, claro y sobre todo mantenible.  El código fuente del ejemplo lo pueden encontrar en la sección “contenido” de La Liga Silverlight.

Recordatorio: El curso Silverlight Tour Workshop en Español – Puebla, México!

Les recuerdo que ya estamos a escasos 7 días de iniciar el curso Silverlight Tour Workshop en Español en la ciudad de Puebla, Pue. en México.  El Silverlight Tour Workshop es un curso de Silverlight 2 y Silverlight 3, de tres días completos, intenso y de alta profundidad técnica !

Quedan muy pocos lugares así que les sugiero que se registren en el sitio del curso.

Puebla es la primer ciudad que tendrá el curso actualizado a Silverlight 3 Beta 1 anunciado en el MIX09 hace algunas semanas!

Nos vemos en Puebla!!!

Silverlight 3 Beta 1: Conexión Local

Silverlight 3 Beta 1: Conexión Local

Nota: Este artículo ha sido reemplazado por este otro:

http://rdiazconcha.com/2010/06/silverlight-4-conexin-local/

Introducción

Nuevo en Silverlight 3 tenemos una nueva característica que permite comunicarnos entre diferentes aplicaciones dentro de la misma máquina.  Esta característica está bautizada como Conexión Local (Local Connection en inglés).  Si bien en Silverlight 2 tenemos la posibilidad de comunicarnos entre diferentes aplicaciones dentro de la misma página no es una tarea trivial; además tratar de hacerlo entre diferentes instancias de navegadores es prácticamente un infierno.

Esta nueva funcionalidad nos ofrece un mecanismo poderoso para poder complementar nuestros aplicativos que requieran tener comunicación entre sí, ya que implementar esta característica es bastante sencillo como lo demostraremos en este artículo.

System.Windows.Messaging

Todas las clases necesarias para la implementación de la conexión local entre aplicaciones están incluidas en el espacio de nombres System.Windows.Messaging

Clase LocalMessageSender

Esta clase permite el envío de mensajes a un receptor por medio del nombre especificado.  Además permite establecer el nombre del dominio en el que se encuentra el receptor.  Incluye el método SendAsync() el cual enviará el mensaje de manera asíncrona al receptor.  Una vez enviado el mensaje se disparará el evento SendCompleted, el cual incluye en sus argumentos la propiedad Error la cual nos indica si sucedió una excepción durante el envío del mensaje.

Clase LocalMessageReceiver

Análoga a la clase LocalMessageSender, esta clase nos permite recibir mensajes.  También aquí establecemos el nombre del receptor, que deberá concordar con el nombre establecido en el objeto de tipo LocalMessageSender.  Una vez recibido un mensaje se dispara el evento MessageReceived el cual incluye en sus argumentos la propiedad Message de tipo string, misma que contiene el mensaje enviado por la aplicación origen.

Además de esto podemos especificar los dominios válidos de los que puede recibir mensajes este objeto!

Modelo Publicador-Subscriptor

Es a través de este modelo publicador-subscriptor por el cual podemos implementar comunicación entre diferentes aplicaciones de Silverlight 3 en la misma página, o en diferentes pestañas del Navegador… incluso entre diferentes instancias de Navegadores, INCLUSO entre diferentes tipos de Navegadores (IE, FF, GC, etc.!).

Es importante mencionar además que una aplicación de Silverlight no está limitada a ser únicamente publicador o subscriptor, sino que puede ser ambos!  Esto es, podemos establecer una comunicación local bidireccional entre aplicaciones.  El único requisito es tener los objetos LocalMessageSender y LocalMessageReceiver en cada aplicación de manera correcta.

La Solución

La solución que crearemos estará compuesta de dos aplicaciones Silverlight.  La aplicación Origen permitirá la captura de contenido Xaml dentro de un TextBox e incluirá un botón para enviar el Xaml a la aplicación Destino.

La aplicación Destino por su parte estará escuchando nuevos mensajes que le envíe la aplicación Origen.  Cuando llegue efectivamente un mensaje, interpretará el Xaml convirtiendo todo el árbol de contenido en los elementos visuales correspondientes al código, y los dibujará dentro de un Grid llamado LayoutRoot.

Ambos proyectos de Silverlight estarán contenidos en una misma solución, la cual también incluirá una Aplicación Web para poder probar la funcionalidad.  Además ambos proyectos estarán relacionados a la misma Aplicación Web para que nos cree automáticamente las páginas de prueba.  La siguiente figura muestra la estructura de la solución:

Origen

La aplicación Origen contiene un TextBox para escribir una cadena de Xaml válida que se enviará al destino.  Además contiene un botón que hará efectivamente el envío del mensaje.  El siguiente fragmento de código muestra la implementación de la aplicación Origen:

Destino

La aplicación Destino recibirá el mensaje enviado por el Origen:

Noten cómo se establece el nombre del receptor como “SL3ConexionLocal”.  Posteriormente se comienza a escuchar por mensajes usando el método Listen() y cuando uno es recibido efectivamente se interpreta a un objeto de tipo UIElement a través del método XamlReader.Load().

Al ejecutar la aplicación Origen en un Navegador y la aplicación Destino en otro (usando las páginas de prueba creadas automáticamente para cada aplicación) podemos comprobar esta funcionalidad:

El siguiente ScreenCast muestra la solución construida en este artículo ejecutándose incluso usando un segundo publicador (aplicación Origen corriendo en FireFox).  También es notable el uso de tres diferentes tecnologías de Navegadores lo cual muestra la capacidad que tiene Silverlight para ejecutarse en múltiples ambientes.

Silverlight 3 – Conexión Local

Resumen

La Conexión Local incorporada en Silverlight 3 permite comunicarnos de una aplicación a otra a través de un mecanismo de publicación-subscripción.  Esta interesante y poderosa funcionalidad abre nuevos paradigmas en el desarrollo de aplicaciones RIA, ya que su modelo de programación es bastante sencillo y sus alcances en soluciones con Silverlight son innumerables.

Silverlight 3 Beta 1: Conciencia de Conexión

Silverlight 3 Beta 1:  Conciencia de Conexión

Nota: Este artículo ha sido reemplazado por este otro:

http://rdiazconcha.com/2010/06/silverlight-4-conciencia-de-conexin/

El nuevo espacio de nombres System.Net.NetworkInformation de Silverlight, incorporado en Silverlight 3 Beta 1 nos permite implementar una funcionalidad de “conciencia” de conexión en nuestras aplicaciones, esto es, saber en un momento dado si la aplicación está ejecutándose en un ambiente conectado o ha perdido la conexión; para poder determinar un comportamiento correcto en cada uno de esos escenarios.  Esta funcionalidad nos sirve tanto para aplicaciones que se estén ejecutando dentro del Navegador como en aplicaciones Fuera del Navegador, es por eso que dejé este tema como un artículo por separado (ver el artículo Silverlight 3 Beta 1:  Fuera del Navegador para más información al respecto de este tipo de aplicativos).

Clase NetworkInterface

Esta clase abstracta incluye el método estático GetIsNetworkAvailable(), el cual nos indica si hay una conexión de red o no.

Es muy importate mencionar que este método NO indica si hay una conexión a Internet, es decir, no está directamente relacionado una conexión de red disponible a una conexión en Internet efectivamente.  Una manera para conocer si tenemos una conexión a Internet es hacer ping a un sitio conocido y con alta disponibilidad (ejemplo: www.microsoft.com, o www.yahoo.com) y/o utilizar las clase WebClient para descargar un archivo conocido en nuestro servidor donde esté hospedada la aplicación, por ejemplo: un archivo de texto pequeño que podamos descargar y leer para determinar si efectivamente tuvimos acceso a través de Internet.

El siguiente fragmento de código muestra cómo podemos utilizar NetworkInterface.GetIsNetworkAvailable() para determinar si tenemos una conexión de red:

Clase NetworkChange

Un paso más adelante en esta funcionalidad está la clase NetworkChange la cual incluye el evento NetworkAddressChanged.  Este evento es disparado cuando hay un cambio en el estado de la conexión de red y está basado en el delegado NetworkAddressChangedEventHandler.  Si lo usamos junto con NetworkInterface.GetIsNetworkAvailable() podemos tener un mecanismo para automáticamente saber si nuestra aplicación está ejecutándose en un ambiente con o sin conexión.

Nota: Este evento no se disparará si simplemente pones tu Navegador ‘Work Offline’

Construyendo la Clase NetworkChangeExtended

Gracias a que la clase NetworkChange no está marcada como sellada, podemos crear fácilmente una clase que extienda esta funcionalidad para determinar no solo si hay conectividad de red, sino determinar que exista realmente conexión a Internet.

A continuación les presento el código de una clase llamada NetworkChangeExtended, la cual efectivamente hereda de NetworkChange pero que incluye la funcionalidad para detectar si hay conexión de Internet o no, por medio del uso de un objeto de tipo WebClient para descargar un archivo de texto llamado Archivo.txt.  Archivo.txt deberá estar en el sitio de origen (/ClientBin de manera predeterminada) y deberá contener algo de texto.

Para usarla simplemente nos inscribimos al evento InternetAvailable, el cual se disparará cuando haya un cambio en el estado de la conexión a Internet:

El siguiente screencast muestra el uso de esta clase en una aplicación de Silverlight 3 beta 1.  El screencast muestra cómo inicialmente se cuenta con acceso a Internet, posteriormente se desconecta el cable de red logrando así que la clase detecte el cambio y despliegue en el TextBlock si hay conexión a Internet o no.  Finalmente se vuelve a conectar el cable para tener el estado inicial.

Resumen

La funcionalidad de Conciencia de Conexión presente en Silverlight 3 Beta 1 es un instrumento bastante útil para que nuestras aplicaciones puedan determinar si están ejecutando en un ambiente con conectividad de red o no.  Asimismo, vimos cómo es fácil extender dicha funcionalidad para incluir un mecanismo de detección de acceso a Internet, a través de una clase que extienda la clase NetworkInterface y que haga uso de un objeto WebClient para descargar asíncronamete un archivo del servidor, por lo tanto determinar la presencia de una conexión a Internet.

Silverlight 3 Beta 1: Aplicaciones Fuera del Navegador

Silverlight 3 Beta 1:  Aplicaciones Fuera del Navegador

Nota 21/Junio/2010: Este artículo fue hecho con SL3 Beta 1 pero en la versión 4 ocurrieron muchos cambios con respecto a a las Aplicaciones Fuera del Navegador.  Te recomiendo que mejor vean este screencast para tener la información más actualizada:

http://channel9.msdn.com/posts/Channel9Mexico/15-Aplicaciones-Fuera-del-Navegador/

Introducción

Una de las características nuevas incluidas en la última versión de Silverlight: Silverlight 3 Beta 1 es el soporte a que nuestras aplicaciones puedan ejecturse fuera del navegador (OOB por sus siglas en inglés Out Of Browser), esto es, que no tengas que navegar a página equis de sitio ye para poder correr dicha aplicación.  Más que un simple código que debemos agregar a nuestra aplicación, esta característica tiene muchos detalles que vale la pena explicar paso a paso.  El objetivo de este artículo es precisamente eso.

Elemento Deployment.ApplicationIdentity

Para que nuestra aplicación pueda ser ejecutada fuera del navegador necesitamos habilitar esta opción modificando el manifiesto (implementado en el archivo AssemblyManifest.xml) de nuestro proyecto de Silverlight 3 agregando el elemento ApplicationIdentity.  Con este elemento podemos establecer diversas propiedades para nuestra aplicación como el nombre, el título de la ventana, la descripción y los iconos a mostrar cuando esté la aplicación como acceso directo en el escritorio, en la barra de tareas, etc.

Cabe mencionar que las plantillas de Silverlight 3 Beta 1 para Visual Studio .NET 2008 ya incluyen el elemento ApplicationIdentity encerrado en un bloque de comentario, para simplemente “descomentarlo” y habilitar la opción de una manera sencilla.  Por el otro lado, si estás convirtiendo un proyecto de Silverlight 2 a Silverlight 3 Beta 1 –como es el caso de este artículo-, el Asistente de Conversión NO agregará de manera automática el elemento ApplicationIdentity y lo tendrás que agregar manualmente.  A esto debemos añadir que no hay actualmente soporte de Intellisense para este elemento cuando lo estamos editando en Visual Studio.

Ahora para que este artículo esté basado en una aplicación real voy a utilizar el ejemplo del Silverlight Fred (sencillo juego de memoria que asemeja al Fabuloso Fred: famoso juguete en la década de los 80) publicado hace algunos días y le agregaremos la característica de ejecutar Fuera del Navegador.

Iconos

El elemento Deployment.ApplicationIdentity soporta el subelemento ApplicationIdentity.Icons en el cual podemos establecer los iconos que nuestras aplicación requiera.  Podemos establecer cuatro tamaños para los iconos:

  • 128×128
  • 48×48
  • 32×16
  • 16×16

El tamaño de 128×128 es utilizado por la caja de diálogo cuando estemos “instalando” la aplicación Fuera del Navegador, el resto son utilizados por el Sistema Operativo para el acceso directo del escritorio (en Windows), el icono para la ventana de la aplicación, el taskbar, etc.)

El siguiente código muestra el manifiesto completo del proyecto de Silverlight 3 con el elemento ApplicationIdentity incluido:

En este caso estoy usando cuatro iconos, uno para cada tamaño en formato en PNG.  Es importante comentar que los iconos deberán estar marcados como “Content” en Visual Studio para que sean parte del .XAP y no como recursos adjuntos del ensamblado principal:

Instalación

Podemos instalar las aplicaciones Silverlight 3 Fuera del Navegador de dos maneras:

  1. Programáticamente, en respuesta a un evento lanzado por el usuario (el clic de un botón, el presionar una tecla, etc.) utilizando el método Application.Current.Detach()
  2. Haciendo clic secundario en la aplicación en el Navegador y seleccionar la opción de “Instalar <nombre de aplicación> en este equipo”

La siguiente figura muestra la opción en el menú contextual al hacer clic-secundario sobre la aplicación en el Navegador:

Ahora bien, sea cual fuese el mecanismo por el cual se instala la aplicación de Silverlight 3 Fuera del Navegador, se mostrará la siguiente caja de diálogo:

Es en esta caja de diálogo en donde determinamos si queremos un acceso directo en nuestro escritorio o en el grupo de programas, además podemos observar cómo es mostrado el icono de tamaño 128×128 anteriormente descrito en este artículo.

Una vez creado los o el acceso directo podremos ejecutar la aplicación tal y como si fuera una aplicación que haya sido instalada de manera local:

Ahora bien: ¿Cuál es la ruta de ese acceso directo? ¿A qué programa o archivo apunta?  Debemos recordar que las aplicaciones Silverlight son un archivo con extensión .XAP que no es más que un archivo .ZIP el cual incluye todo lo necesario para ejecutarse, pero NO es un ejecutable per sé, no es un tipo de archivo que el Sistema Operativo entienda como ejecutable.

sllauncher.exe

Si vemos las propiedades del acceso directo creado al instalar la aplicación Fuera del Navegador podemos observar que es un acceso al Microsoft Silverlight Offline Launcher o sllauncher.exe.  Este aplicativo permite la ejecución de aplicaciones .XAP de Silverlight ya que *emula* precisamente el comportamiento de un Navegador.

El sllauncher.exe recibe como parámetro el identificador de la aplicación a ejecutar, en el caso de este artículo “localhost.0” es el identificador.  El identificador de la aplicación o AppID está compuesto por <nombre del dominio>.<secuencia> en donde “secuencia” es el número de aplicaciones que has instalado de ese dominio, es decir, la siguiente aplicación Fuera del Navegador sería localhost.1 la siguiente localhost.2 y así sucesivamente.

Ejecutemos la aplicación Fuera del Navegador utilizando el acceso directo.

Un hecho importante es que esa aplicación es una instancia diferente a la instancia que se está ejecutando en el Navegador, esto debido a que cuando “instalamos” una aplicación de Silverlight Fuera del Navegador esa aplicación es colocada en un fólder especial en la siguiente ruta:

C:\Users\<Nombre del Usuario>\AppData\LocalLow\Microsoft\Silverlight\Offline\<Identificador de la aplicación>

Asimismo no debemos perder de vista que aunque la aplicación esté ejecutándose afuera de un Navegador, la aplicación sigue estando en un sandbox de baja confianza.  Esto significa que si bien nuestras aplicaciones de Silverlight 3 están “viviendo” en el equipo del cliente no pueden tener acceso a recursos fuera de ese sandbox, por ejemplo no pueden tener acceso a los puertos del equipo, ejecutar ensamblados que requieran permisos especiales y un largo etcétera.  Esta característica es hoy en día motivo de polémica ya que muchas personas les gustaría ver a Silverlight 3 con todos los permisos como cualquier aplicación local.  En mi particular punto de vista esto sería contraproducente por motivos de riesgos en la seguridad así como también por el hecho que Silverlight está pensado para hacer aplicaciones tipo RIA, distribuibles a través de la Web.  En todo caso para eso tenemos al alcance de nuestra mano WPF y/o otras tecnologías, claro está, no son multi-plataforma como lo es Silverlight pero ese es tema de otro artículo.

Metadatos

Es en este fólder donde precisamente vamos a encontrar el archivo .XAP junto con otros archivos de metadatos creados automáticamente por el runtime de Silverlight 3 para poder ejecutar esa aplicación Fuera del Navegador.  El archivo metadata que encontramos en este fólder incluye información acerca de la aplicación como la fuente original del archivo .XAP, en qué archivo HTML hospedar la aplicación Silverlight, el título y descripción de la aplicación y el AppID:

Y hablando precisamente del archivo HTML que hospedará la aplicación .XAP, podemos darnos cuenta que no es más que un archivo HTML normal, que incluye el elemento <object> para instanciar el plugin de Silverlight.  La fuente del plugin de Silverlight tiene la sintaxis offline://<app ID> tal y como lo muestra el siguiente fragmento de código tomado del archivo index.html; generado automáticamente por Silverlight al “instalar” nuestra aplicación Fuera del Navegador:

Un punto que en lo personal espero ver en las próximas versiones de Silverlight 3 es la posibilidad de personalizar este archivo HTML y tener más control sobre él ya que por el momento es creado automáticamente sin intervención alguna del usuario o de los desarrolladores.  Esperemos que así suceda en un futuro.

Almacenamiento Aislado

Ya que la capacidad Fuera del Navegador de Silverlight 3 está pensada para un escenario de aplicaciones desconectadas o probablemente frecuentemente desconectadas el Almacenamiento Aislado de Silverlight 3 para las aplicaciones Fuera del Navegador es aumentado automáticamente de 1MB a 25MB, esto con el objetivo de permitir a nosotros los desarrolladores el tener más espacio para guardar datos para efectivamente permitir un escenario offline, sin necesidad de solicitar un incremento del tamaño del espacio al usuario final.  Nota:  Estos 25MB no son regresados a 1MB cuando *desinstalamos” la aplicación Fuera del Navegador.  Este es un comportamiento de la versión Beta 1 de Silverlight 3 y probablemente cambie en próximas versiones.

También debemos tomar en cuenta un punto muy importante:  tanto la aplicación Fuera del Navegador (fuera de línea) como su versión Dentro del Navegador (en línea) utilizan el mismo Almacenamiento Aislado, un hecho bastante importante para escenarios de sincronización una vez re-establecida la conexión de la aplicación, o para guardar configuración, estado, etc.

El Puente HTML y las aplicaciones Fuera del Navegador

Si tu aplicación de Silverlight 3 en el Navegador utiliza el Puente HTML (el componente de Silverlight que sirve para comunicarnos al DOM), esta característica está deshabilitada de manera predeterminada en las aplicaciones Fuera del Navegador de Silverlight 3 Beta 1.  Si ejecutan algún método del Puente HTML (implementado en la clase HtmlPage), causará una excepción con el siguiente mensaje de error:

AHORA bien, SÍ podemos habilitar el Puente HTML editando directamente el archivo index.html, agregando simplemente el parámetro enablehtmlaccess y establecerlo a true.  En este caso sllauncher.exe se comporta como cualquier Navegador ya que es capaz de entender la funcionalidad de los métodos que la clase HtmlPage expone; tanto navegar a una página Web por medio de HtmlPage.Window.Navigate() como crear elementos HTML de manera dinámica como la siguiente ilustración lo demuestra:

El código del botón para demostrar que sí podemos habilitar el Puente HTML si lo forzamos es el siguiente:

Una cuestión que aún no logro descifrar es que si sllauncher.exe es Internet Explorer sin cromo (menús, borde, etc.) ya que incluso si ejecuto la siguiente línea en mi aplicación:

El Navegador que abrirá esta página es IE y no FireFox.  Espero que a corto plazo nuestros buenos amigos de Microsoft puedan aclararnos exactamente este comportamiento.

Actualización

Una aplicación Fuera del Navegador no requiere una conexión para ejecutar, ya que como su nombre lo indica está pensada para operar fuera de línea y estar en espera a que la conexión se restablezca.  Cuando hay una conexión disponible, la aplicación al ser ejecutada irá al servidor a buscar si hay una nueva versión disponible.  Si efectivamente hay una versión más nueva el archivo .XAP más reciente es copiado del servidor al cliente sin intervención alguna por parte de los usuarios; además de esto un evento es levantado en la aplicación para indicar que hay una nueva versión y de esa manera indicar al usuario que no está ejecutando la última versión.  El evento se llama ExecutionStateChanged y está implementado en la clase Application.  Una vez levantado este evento es conveniente consultar la propiedad ExecutionState la cual tendrá el valor ExecutionStates.DetachedUpdatesAvailable en este caso.  La nueva versión será ejecutada la próxima vez que la aplicación sea iniciada.

Una cosa más al respecto:  por el momento en Silverlight 3 Beta 1 no hay manera de evitar la descarga de la nueva versión de la aplicación; no obstante esto es probable que sea modificado en próximas versiones de la plataforma.  Lo ideal sería preguntar al usuario si desea actualizar efectivamente la aplicación o no; dejando esta opción al buen criterio y al tiempo que tengan los usuarios en ese momento.

Depuración

Ya que la aplicación Fuera del Navegador es hospedada en sllauncher.exe, debemos adjuntarnos a este proceso si deseamos depurar nuestra aplicación.  La siguiente figura muestra cómo el código es alcanzado una vez adjuntándonos a dicho proceso desde Visual Studio.  El código que es alcanzado es la excepción que se obtiene al utilizar los métodos de la clase HtmlPage (sin haber forzado su habilitación como se explica en este mismo artículo):

Desinstalación

Al hacer clic-secundario sobre la aplicación ya sea en el Navegador o en sllauncher.exe se nos presenta la opción para removerla.  Al hacer clic todos los accesos directos creados por la instalación son borrados así como el contenido del fólder de la aplicación localizado en C:\Users\<Nombre del Usuario>\AppData\LocalLow\Microsoft\Silverlight\Offline\<Identificador de la aplicación>.  Como lo comenté antes, al remover una aplicación Fuera del Navegador los 25MB de del Almacenamiento Aislado no son regresados a 1MB; este es el comportamiento que tiene Silverlight 3 Beta 1 en estos momentos pero podrá ser modificado en futuras versiones.

Resumen

La posibilidad de ejecutar nuestras aplicaciones de Silverlight afuera del Navegador nos brinda muchas nuevas oportunidades para el desarrollo de aplicaciones que usen esta plataforma.  Aplicaciones totalmente o frecuentemente desconectadas que puedan ser operables de manera local y que puedan sincronizar sus datos o estado en el momento que haya una conexión disponible es motivo suficiente para tomar Silverlight como plataforma de desarrollo robusta, confiable y ligera: una plataforma que puede llegar allá donde no han llegado otras tecnologías de Microsoft.

Recordatorio: WebCast de La Liga Silverlight el miércoles 15 de Abril

Les recuerdo que el próximo 15 de Abril a las 7:00pm (-06:00 GMT) tendremos la Primer Reunión Virtual de La Liga Silverlight, en donde @jluisestrada y un servidor estaremos hablando de la comunidad, de Silverlight y de cómo construir Gadgets para Windows Vista con Silverlight 2

+

Agenda

7:00pm – 7:15pm : Introducción a La Liga Silverlight e Introducción a Silverlight

Expositor: Rodrigo Díaz Concha

7:15pm – 7:50pm : Desarrollo de Gadgets para Windows Vista con Silverlight 2

Expositor:  José Luis Estrada

7:50pm – 8:00pm : Sesión de Preguntas y Respuestas. Invitaciones y Anuncios

Expositores:  José Luis Estrada y Rodrigo Díaz Concha

Registro

http://msevents.microsoft.com/CUI/EventDetail
.aspx?EventID=1032413178
&Culture=es-MX

Los esperamos!!!

Cómo agregar contenido Silverlight en tu blog de WordPress

Si bien este artículo está totalmente basado en el hecho de que mi blog está implementado en WordPress, de fondo son los mismos conceptos si es que utilizas cualquier otro motor de blogging.

WordPress cuenta con una vasta galería de Widgets que podemos utilizar en nuestro sitio para extender su funcionalidad.  Uno de estos Widgets, que ya viene incluído de manera predeterminada es el Text/HTML.  Este componente te brinda la oportunidad de implementar cualquier tipo de código HTML arbitrario incluso Javascript.

Por el otro lado, hay diferentes maneras de instanciar el plugin de Silverlight en una página Web, una de ellas es utilizar el elemento <object> de HTML indicando los parámetros correctos para su inicialización.  Además, una de las características que tiene Silverlight es que podemos tener nuestro archivo .XAP en un dominio diferente a la página que donde lo vamos a instanciar; por lo tanto el único requisito es que tu archivo .XAP esté accesible.

Así que:

  1. Sube tu archivo .XAP
  2. Agrega el Widget de Text/HTML en tu página
  3. Instancia el plugin de Silverlight usando el elemento <object> indicando como fuente el archivo .XAP
  4. Si tu aplicación hace uso del Puente HTML de Silverlight, habilítalo por medio del parámetro enablehtmlaccess y establécelo en “true”

El siguiente código es el que estoy utilizando para instanciar el Widget del Silverlight Tour Workshop en Español, noten cómo el archivo .xap vive efectivamente en el dominio silverlight-tour.com.mx y no en rdiazconcha.com.  También vale la pena notar que se está habilitando el Puente HTML y además se está estableciendo un parámetro necesario para la aplicación con initparams.

También recuerda que tienes la opción de modificar la imagen que les aparece a los usuarios que no tienen instalado Silverlight simplemente cambiando el atributo src del <img> en el código de arriba.

Ahora bien, también puedes instanciar el plugin de Silverlight utilizando la función createObjectEx() del archivo Silverlight.js incluido en la plantilla de Visual Studio, pero tendrías que subir el archivo .js a tu servidor, referenciar el script, y utilizar la función.  <object> parece ser mejor opción si lo único que necesitas es ejecutar una aplicación en tu página.

Sea una opción u otra, instanciar una aplicación de Silverlight en tu sitio es una tarea muy sencilla. 

Salu2!