SlideShare une entreprise Scribd logo
1  sur  31
Fundamentosde Silverlight–Parte1
¿Qué esSilverlight?
Silverlight es una tecnología quenos permite crear Aplicaciones Enriquecidas para Interneto RIApor sus siglas eninglés (Rich Internet
Applications). Con Silverlight podemos construir aplicaciones quevandesde pequeños componentes dentro deuna página Web hasta
sofisticadas Aplicaciones deNegocio que esténconsumiendoy presentando datos dealguna basededatos,pasando por juegos
casuales, reproductores demultimedios,Gadgets para Windows Vista o 7, y unlargo etcétera.
Incluso después demás de 3 años dehaber sido liberada al público engeneralsuprimera versión, aún existenmuchas confusiones y
malinterpretaciones acerca de esta tecnología. Primeramente, tenemos quedecir queSilverlightes una tecnología multi-navegador,
esto es,es capaz deejecutar adentro delos navegadores más comunes disponibles hoy en día: Internet Explorer,FireFox, Chrome y
Safari.
Por otro lado, Silverlight es una tecnología Multi-Plataforma, esto es,es capaz de ejecutar en los principales Sistemas Operativos
disponibles hoy en día: Windows, MacOSX y Linux(a través de Moonlight, proyecto quees llevado a cabopor la empresa Novelly que
es la implementación deSilverlight para eseSistema Operativo).
Al momento deestarescribiendoestedocumento, Moonlight notieneparidad 1a 1 con las características de Silverlight 4.Para mayor
informaciónpuedes consultarelroadmapde Moonlight enhttp://www.mono-project.com/MoonlightRoadmap
Silverlight,a diferencia deotras tecnologías WebdelladodelServidor (por ejemplo: ASP.NET, PHP,etc.), es una tecnología del lado del
Cliente, es decir, todoel cómputoy ejecuciónde las aplicaciones sucedeenel equipodel usuario,tal y como si se tratase decualquier
tipo de aplicacióninstalada. Esto es una granventaja ya queSilverlightpuedesacar provechode las características de procesamiento
del hardware en dondeestá instalado.
Silverlight es unpluginqueofrece una experiencia deinstalación muysimilar a cualquier otro pluginpara los navegadores. En el caso de
la versión 5 (que es la versión más nueva disponiblealmomentode estar escribiendo esto) tiene untamañoaproximado de7 MB para
el caso delSistema Operativo Windows.
Duranteel lanzamiento deSilverlight4 enAbril2010, se anunció que próximamentelas aplicaciones de Silverlight podrán ejecutar en
electrónicos deuso comúnen nuestros hogares, comotelevisores,reproductores deDVD,reproductores deBlu-Rayy cajas
decodificadoras decablepara la TV. Asimismo, Silverlight es una delas plataformas de desarrollopara la nueva versióndelSistema
Operativomóvil deMicrosoft: Windows Phone7. En conjuntoconXNAcomo plataforma para la construcciónde juegos 2D / 3D,
Silverlight ofrecea los desarrolladores de Aplicaciones móviles una plataforma robusta, fácil deaprendery con una oferta de
herramientas conalta funcionalidad.
Con lo anterior podemos deducir queSilverlightes una gran apuesta para ser una tecnología que sea capaz de ejecutar dela misma
manera, endiferentes lugares: en los tres tipos depantalla más comunes en la vida de las personas hoy endía (equipos decómputo
tradicionales comoPC’s o Laptops,Televisores y teléfonos móviles). Un mismo códigoejecutandoen diferentes dispositivos,con
diferentes resoluciones, concaracterísticas de hardwarediferente.Es degranimportancia estoya quelos desarrolladores podrán
reutilizar sus conocimientos existentes en tecnología .NETpara poder construir soluciones quelleguen a más personas y en lugares
donde antes esto no era posible.
(Actualización del20 dediciembre2011)
Se presumequeelnuevodashboard deXbox liberadoen noviembre2011incluyeSilverlight comola plataforma dedesarrollopara sus
aplicaciones. Sin embargo, aún nohaydocumentacióntécnica oficialaldía dehoy quehableacerca deello.
 http://www.istartedsomething.com/20111206/the-future-of-xbox-is-apps-on-your-tv/
 http://www.engadget.com/2011/10/10/microsoft-reportedly-preparing-silverlight-like-app-framework-ah/
Silverlight y HTML
El propósito deSilverlight nunca ha sido reemplazarHTML como tecnología depresentación deInterfaces deUsuario, sino
complementarla con características y funcionalidades queno están disponibles en dicha tecnología. Si bien HTML es unestándar que
pretendeser implementado demanera única y consistenteen todos los navegadores disponibles hoy endía, esto en la práctica ha sido,
es y será un proceso lento ya quepodemos destacar una falta de quórum entre las principales empresas que respaldan sus
navegadores, quienes (paradójicamente) implementan las especificaciones deestándares demanera diferente.Además si hablamos en
términos defuncionalidad,Silverlight ofrece más y mejores características.
Otras consideraciones importantes son:
Rendimiento
El rendimiento delas Aplicaciones deSilverlightes superior gracias a que el códigoejecuta bajo elCommon Language Runtime(CLR),
además dequecuenta conmúltiples hilos deejecución.
Consistencia
Silverlight se asegura derenderizar las Aplicaciones de manera consistente en cualquier lugar dondeestéejecutando
Tiempo
El tiempo deinnovaciónes un puntomuy importanteya quela evolución dela funcionalidad y características en las versiones futuras
de Silverlightsucederánen unlapso detiempo muy corto, a comparaciónde las especificaciones deestándares como HTML.
Para mayor información puedes consultarel siguiente artículo deBrad Becker, Directorde Administración deProductos, Plataformas de
Desarrollo: http://team.silverlight.net/announcement/the-future-of-silverlight/
Silverlight y el .NETFramework
Una característica muy importante acerca de Silverlight es que norequieredel .NETFramework tanto del lado del Clientecomo del lado
del Servidor. Dellado delClientees obvio ya quees precisamentea esto quepodemos ejecutar aplicativos de Silverlight en Sistemas
Operativos queno sean Microsoft Windows. Ymás aún, también es independientedel.NETFramework delladodelServidor: noes
necesario tener instalado Internet Information Services (IIS) en nuestro Servidor Web, también puede ser Apache, Tomcat,etc.
(Actualización del16 deseptiembre2011)
Silverlight y Windows8
Duranteel primerkeynotedel evento//Build/ quesellevó a cabo del 13 al 16deSeptiembreenAnaheim,CA., se mostróalmundo
entero la plataforma dedesarrollode aplicaciones enelpróximo Sistema Operativo deMicrosoft: Windows8.En Windows 8habrá dos
categorías deaplicaciones: AplicacionesMetro, las cuales están enfocadas a dispositivos táctiles comotablets y Aplicacionesde
Escritorio, las cuales sonlas aplicaciones deventanas que todos conocemos con mecanismos deentrada tradicional deteclado y
mouse, porejemplo, Aplicaciones deNegocio(LOB por sus siglas eninglés),Aplicaciones detipo OLTP,Herramientas, etc.
La plataforma dedesarrollo para las Aplicaciones deEscritorio está basada en .NETy Silverlight,tal y como sucede hoy en día, por lo
que no hay ningúntipo decambio con respecto a las aplicaciones actuales.
Por otro lado, la plataforma de desarrollo para las Aplicaciones Metro está basada en Windows Runtime(WinRT, un API orientada a
objetos alterna a Win32) y XAMLo HTML. El motorde interpretaciónde XAMLha sido incorporadoalcore del Sistema Operativo ¡por
lo que ahora más que nunca es muy importanteconocer y dominar esteimportantelenguaje!
Como podrás observaren la ilustraciónanterior,en Windows 8 el .NETFramework y Silverlightsiguen siendolas plataformas
principales para la creaciónde Aplicacionesde Escritorio, ya quesibien es importanteun soporte nativoa los dispositivos con pantallas
táctiles, hay muchos escenarios en dondeno hace sentido teneruna aplicación deesteestilo, por lo que las Aplicaciones deEscritorio
seguirán siendola principalcategoría durantemuchos años por venir.
Fundamentosde Silverlight–Parte2
Versionesde Silverlight
La historia de Silverlightseremonta alaño 2007,cuando aún se
denominaba WPF/e(acrónimodeWindows PresentationFoundation /
everywhere,debido a su íntima relación con esa tecnología y portener
como objetivoser precisamente multi-plataforma). En aquel tiempo fue
liberada alpúblico la versión 1.0,quesuobjetivoprincipalmente estaba
enfocado en la reproducciónde multimedios. El modelo de
programación deesta primera versión estaba reducido a utilizar
JavaScriptcomo lenguajepara la construcciónde aplicaciones e incluía
únicamente figuras básicas y textopara crear las Interfaces deUsuario.
Fue hasta la versión 1.1 que Microsoft habría anunciado estaría
disponiblela plataforma de desarrollo de.NETpara poder construir
aplicaciones ya queSilverlightincluiría una implementación del CLR. Esta
versión fueposteriormenterenombrada a Silverlight 2,por tratarsede una liberación con una gran cantidad decambios y mejoras y
que merecía una asignación deversiónmayor. Fuea partirde este momento en dondemuchos desarrolladores y empresas voltearon a
ver esta tecnología, ya queenpocas palabras, significaba poderprogramar con la comodidad y robustez de VisualStudio.NETy con
alguno de los lenguajes dedicha plataforma,pero no únicamente para Windows sino para Mac también.
Posteriormentefue anunciada la versión 3 que incluiría más y mejores características pero ahora enfocadas principalmentea la
construcción deaplicaciones de negocio. Características como ejecución Afuera delNavegador, más controles para datos, elFramework
de Navegación,PixelShaders, soporte para ClearType, Conexiones Locales y una grancantidadde componentes fueronliberadas en
esta versión.
En Silverlight 4 se agregaronmás características para Aplicaciones de Negocio,como la Confianza Elevada, con la cual prácticamenteno
hay ningún límiteenlo que puedenhacer las aplicaciones de Silverlight.
[Acualizacióndel 14/Ene/2012]
Silverlight paraWindows Phone 7.1(nombre clave "Mango") –la nuevaversión delSistema Operativo móvilde Microsoft está basado
en Silverlight 4. Esto quiere decirque lagran mayoría de las características incorporadas en Silverlight 4están disponibles en las
aplicaciones paraWindows Phone 7.1; soloalgunas cosas contadas noestarán disponibles. Paramayor información consultaesta
página.
[Acualizacióndel 14/Ene/2012]
La última versión disponibledeSilverlight al momento deestarescribiendoestetextoes Silverlight 5,liberadoduranteel día 09de
Diciembre2011la cual incluye aúnmás características y componentes específicamente enfocados (sin estar sujetos únicamente a) a la
creación deAplicaciones deNegocio: Confianza Elevada en aplicaciones dentrodelnavegador, p/Invoke, soportea Múltiples Ventanas,
Plantillas deDatos Implícitas,EnlaceAncestor Relative, Extensiones del Marcado Personalizadas,Soportea 64 bits, entre muchos otros.
Para mayor información consulta esta página.
Gracias a lo anterior, Silverlightseestá convirtiendo cada vez más en la plataforma elegida y preferida para eldesarrollode aplicativos
de negocio, modernos,multi-plataforma,con alta funcionalidad y respaldadas por robustas herramientas bien conocidas en el ámbito
del desarrollo en .NET.
Fundamentosde Silverlight–Parte3
Plataformasy NavegadoresSoportados
Silverlight 4 soporta las siguientes versiones de Sistemas Operativos:
SistemaOperativo Versiones
Windows Windows 2000 SP4, Windows XP, Windows Vista, Windows 7,
Windows 8
Mac OS 10.4.11en adelante
Linux A través de Moonlight*
*Al día de hoy, Moonlightno tiene una paridad1:1en funcionalidad conSilverlight4, por lo que probablementeno todas las
aplicaciones ejecutendela misma manera en esesistema operativo. Para mayor información acerca de Moonlightpuedes consultar su
sitio oficial.
Silverlight 4 soporta los siguientes navegadores:
 Firefox 2+
 InternetExplorer 6+
 Chrome 4+
 Safari 4+
Fundamentosde Silverlight–Parte4
Herramientasrelacionadas
Si bien es técnicamenteposiblepodercrear una aplicación deSilverlighthaciendousosimplemente delBlocdeNotas, al hacer esto lo
único que estaríamos haciendoes demostrar lo geek quesomos y quetalvez tenemos mucho tiempo libre.Es porestoquesiempre
debemos utilizar herramientas que nos permitan serlo más eficientes quepodamos, y quenuestro tiempo seenfoqueúnicamente a
resolver los problemas queestamos tratando deresolverinicialmentealcrear una aplicación.
La herramienta porexcelencia para la creaciónde aplicaciones –no solodeSilverlight,sino en general de.NET-es VisualStudio.NET. La
última versión deesta herramienta (por lomenos al estarescribiendo este texto) es VisualStudio.NET2010. Existen una gran cantidad
de ediciones de VisualStudio.NET2010 y cualquier edición nos servirá para construir aplicativos deSilverlight4, desdela versión
Ultimateque es la más completa hasta la versión VisualWebDeveloperExpress 2010 que es totalmentegratuita y es extraordinaria
opción para iniciarse en elmundode desarrollo deaplicaciones Web con .NET. Nos referiremos como “Visual Studio .NET” entodo este
libro a cualquier ediciónquehayas instaladode la versión 2010.
Tener instaladoVisual Studio .NETes insuficiente,ya que únicamente traesoportepara la versión deSilverlight3. Para poder tener
soporte a la versión4 debemos descargare instalar las herramientas de VisualStudio.NET2010 para Silverlight 4.Esta es una descarga
de aproximadamente25MB y que una vez quelas hayas instalado se habrán incluido los siguientes componentes:
 El motor de ejecuciónde Silverlight 4 para desarrollo y depuración
 SDK de Silverlight 4
 Una actualizaciónpara Visual Studio .NETpara soportar Silverlight 4
 WCF RIAServices
HerramientasOpcionales
Prácticamentecon loanterior tenemos todolo necesariopara comenzar a construir aplicativos de Silverlight 4.No obstante, hay una
gran cantidadde herramientas y programas que podemos utilizar para poder hacernuestrotrabajomás sencillo. Acontinuación, se
enlistanalgunas delas más destacables.
Expression Blend 4
Herramienta enfocada para el diseño deInterfaces deUsuarioconSilverlight y WPF. Si bien esta herramienta la estoy considerando
como opcional -porquetécnicamente noes requisito-es de suma importancia y altamenterecomendable quetambién la tengamosa la
mano para poder editarelcódigo XAMLde una manera más fácil. ExpressionBlend está enfocada al rol dediseñador e incluye
diferentes características que en VisualStudio.NETno es posibleencontrar, como por ejemplo: la creación y edición deStoryboards de
animaciones, manejoy administraciónde los Diccionarios deRecursos, creaciónde Estilos,modificaciónde Plantillas deControles,etc.
Para mayor información consulta http://www.microsoft.com/Expression.
Windows Phone 7Developer Tools
Estas son las herramientas necesarias para construir aplicaciones para Windows Phone7. Incluyelas plantillas necesarias para Visual
Studio .NET y el Emulador deWindows Phone7 para poderdepurarnuestrocódigo.Para mayor informaciónconsulta
http://www.windowsphone7.com.
Silverlight Toolkit
Por cuestiones detamaño, el plugin deSilverlightincluye unnúmero limitadode controles que podemos utilizarsin necesidadde
referenciar alguna biblioteca externa. El Silverlight Toolkites un proyecto decódigo fuente abiertosoportado y respaldado por
Microsoft endonde podemos encontrar una grancantidadde controles extra para Silverlight. Para mayorinformaciónconsulta
http://www.codeplex.com/Silverlight.
Deep Zoom Composer
Herramienta quenos ayuda a procesarimágenes para sudespliegue en elcontrol MultiScaleImage(imágenes quetienen una secuencia
de tamaños y resoluciones para poder construir aplicaciones de tipoDeepZoom). Para mayor información consulta
http://www.microsoft.com/downloads.
Fiddler
Fiddler nos permite inspeccionar todo el tráfico que sucedeen HTTP o HTTPS.Nos ayuda a conocer a detalle las peticiones y respuestas
que están sucediendo cuandonos estamos comunicandodesde nuestro aplicativo deSilverlighta algúnlado. Para mayor información
consulta http://www.fiddler2.com.
Reflector
Nos permite inspeccionar los ensamblados de.NETy conocer su código original.Para mayorinformaciónconsulta http://www.red-
gate.com/products/reflector.
Silverlight Spy
Silverlight Spy es una herramienta que nos permiteinspeccionaruna aplicación deSilverlightcuando seestá ejecutando,su árbolde
elementos visuales, sucódigo XAML e incluso su códigofuente. Para mayor información consulta http://firstfloorsoftware.com.
Control Bing Maps
El control de Bing Maps para Silverlightes un controlquenos ayuda a poner unmapa ennuestras aplicaciones para incluir
características degeo localización. Para mayor información consulta http://www.microsoft.com/downloads.
Fundamentosde Silverlight–Parte5
Estructurade losProyectos
Comencemos creando unnuevo proyecto deSilverlight 4. Al igualquecualquier otro tipo deproyecto alutilizar VisualStudio.NET
podemos seleccionar detoda la lista de plantillas quetengamos instaladas la adecuada para nuestros propósitos.
La siguiente figura muestra la caja de diálogo decreaciónde unnuevo proyecto enVisual Studio .NET. Notemos quela enla sección de
plantillas instaladas en la parte izquierda tieneseleccionada la opción de“Silverlight”. Al hacer esto nos mostrará la lista detodas las
plantillas instaladas para esta plataforma.
Figura 2: NuevoProyectode Silverlight
Al hacer clic en elbotón “OK” Visual Studio nos mostrará otra caja dediálogo la cual contieneinformación relacionada alproyectoque
estamos creando. Porejemplo, nos preguntará sideseamos uncrear un proyecto Web relacionado. La necesidadde crearun proyecto
Web relacionado o no lodetallaremos más adelante. Asimismonos ofrecela opciónde seleccionar la versión deSilverlighta la que
queremos apuntar;esta es una opción bastanteútil si estamos creandopor ejemplo unEnsamblado para unproyectode Silverlight
para Windows Phone 7quenecesitemos compartir su funcionalidadpara un proyecto deSilverlight 4. Porúltimo, la caja de diálogo nos
preguntará sideseamos habilitar los WCF RIAServices para este proyecto encuestión (demanera predeterminada esto no estará
habilitado).
La Figura 3 muestra la caja dediálogocon todas las opciones queestamos detallando:
Figura 3: Opciones iniciales
En lo que a nuestra aplicaciónrespecta, aceptaremos todos los valores predeterminados y haremos clic
en el botón OK deesta caja de diálogo. Al hacerestoVisual Studio cerrará la ventana y creará una
Solución con elmismo nombre que indicamos enel pasoanterior y dos proyectos, un proyecto para
nuestra aplicación deSilverlight4 y otroproyecto será el proyecto Web (queelegimos sícrear enel
paso queacabamos dedescribir).
Figura 4: Estructura dela Solución
Proyecto de Silverlight
El proyecto deSilverlightincluye diversos elementos queautomáticamenteincluyeVisualStudio por nosotros.Acontinuación los
enlistamos y describimos:
Fólder “Properties”
AppManifest.xml
Manifiesto dela Aplicación deSilverlight.
AssemblyInfo.cs
Archivo que incluyeatributos globales para elEnsamblado dela Aplicación deSilverlight.
Fólder “References”
Muestra la referencias a Ensamblados de.NETquetieneactualmenteelproyecto.
App.xaml
En la práctica, es posible borrar ambos archivos App.xaml y su code-behind y compilar así el proyecto: nocausará ningúntipode error
en la compilación. No obstante,al hacer esto únicamente veremos la animacióninicialde Silverlightsin ningún tipode funcionalidad
adicional. Moraleja: déjalos como están
El archivo App.xamlrepresenta elXAML global para la Aplicación. En él podemos declararrecursos globales y/o referencias a
Diccionarios deRecursos externos. Debemos tener un archivo deesta naturaleza encada Aplicación deSilverlight.Su nombree s
totalmente arbitrario.
App.xaml.cs
Archivo de code-behindpara la Aplicación. En élencontraremos los manejadores deeventos globales para la Aplicación.
MainPage.xaml
Representa la “pantalla” principal para la Aplicación.Estearchivocomúnmentese abreautomáticamenteeneldiseñador interactivode
Visual Studio. Su nombrees totalmentearbitrario.
MainPage.xaml.cs
Archivo de code-behindpara la pantalla principalde la Aplicación.En él escribiremos los manejadores deeventos y códigoengeneral
para darlefuncionalidad a nuestroaplicativo.
Proyecto Web
Este proyectoes creado únicamente si así loindicamos enla caja dediálogo deopciones iniciales como se muestra enla Figura 3. Este
proyecto está estructurado demanera predeterminada como a continuación seindica:
Fólder “Properties”
Incluye elarchivoAssemblyInfo.cs específicopara elproyecto Web
Fólder “References”
Indica los Ensamblados referenciados en el proyecto
Fólder ClientBin
El fólder ClientBines elfólder destino en dondesecopiará la Aplicaciónde Silverlight automáticamentecuandocompila. Su nombrees
totalmente arbitrario.
Páginas XXXTestPage.aspxy XXXTestPage.html
Los archivos .aspxy .html que incluyeelproyectoWebnos serviránpara probar la Aplicación deSilverlightadentrode unna vegador ya
que incluyenpor dentro el elemento <object>querepresenta la instancia del aplicativo comotal. Sus nombres son totalmente
arbitrarios.
Silverlight.js
Este archivo incluye diversas funciones para elhospedaje dela Aplicación deSilverlighten páginas html.
Web.config
Archivo de configuración propio del proyecto deASP.NET
Agregando un poco de funcionalidad…
A través deldiseñador interactivo enVisualStudio y la caja deherramientas agreguemos un botón(controlButton) y un bloquede
texto (elemento TextBlock) a MainPage.xamltal y como lomuestra la siguiente figura:
Al agregar cada uno delos elementos podemos observar que el código XAML deMainPage.xamles modificadoautomáticamentepor
Visual Studio, esa es precisamentela finalidaddeldiseñador interactivo: el permitirnos crear y modificar nuestra Interface deUsuario
sin necesidadde escribir elcódigoXAML de manera manual.
Ahora bien,hagamos doble-clicenel botón para queVisualStudiocree automáticamente el manejadordelevento predeterminadode
dicho control, enestecaso elevento Click. En elevento Click cambiaremos el texto delbloquedetextopor la fecha y hora actual.La
siguiente caja de texto muestra elcódigo completodel manejador delevento:
1: private voidbutton1_Click(object sender,RoutedEventArgs e)
2: {
3: textBlock1.Text =DateTime.Now.ToString();
4: }
Esta será toda la funcionalidad queimplementemos porelmomento.Ahora vayamos a analizarconmás detalleelmodelo de
compilaciónde las Aplicaciones de Silverlight.
Fundamentosde Silverlight–Parte6
Modelo de Compilación
El proyecto deSilverlightno es más queun proyecto detipo Class Library (Biblioteca deClases). Estoquieredecir que cuando
compilamos el proyecto dela Aplicaciónde Silverlight el resultadode la compilación será un Ensambladollamado
NombreDelProyecto.dll, dondeNombreDelProyecto es el nombre que indicamos al crear unnuevo proyecto deestetipo.
Además delo anterior, elproyectode Silverlight está preparadopara queposteriormente dehaber compilado el archivoDLL, se
empaqueteenun archivoconextensión .xap. El archivo XAP (pronunciado “ZAP”) es copiado automáticamenteal fólderClientBin en el
proyecto Web relacionado. Todoestolo hará VisualStudiosin nuestra intervención.
Ahora bien,¿quées elarchivo XAP?
El Archivo XAP
El archivo XAP representa el aplicativo deSilverlightcomo tal, es decir, el archivoXAP es la unidad dedespliegue delas aplicaciones de
Silverlight.Si bien su extensiónes totalmentearbitraria, elarchivo XAP es un empaquetado detipo ZIP que por dentro incluyetodos los
elementos necesarios para la correcta ejecución dela Aplicación deSilverlight. Esto lo podemos demostrar sicambiamos la extensión
del archivo por .zipcomo a continuaciónmuestra la siguiente figura:
Figura 5: Contenido del Archivo XAP
La figura muestra WinRAR –una utilería para la apertura o creación dearchivos ZIP, RAR entreotros-y el contenidode dicho archivo.
Podemos apreciarentonces queel archivo XAPincluye: el Ensambladoprincipaldela Aplicacióny el Manifiesto dela Aplicaci ón
(archivo AppManifest.xaml).
Ensamblado Principal
El Ensamblado Principal es elresultado dela compilación del proyecto deSilverlighty no es diferente a cualquier otro DLL de.NETque
hayamos utilizadocon anterioridad. Por lotanto, elEnsamblado será código MSIL(Código Intermedio deMicrosoft,por su acrónimoen
inglés MicrosoftIntermediate Language) el cual todo compiladorde .NETestá preparado para generar.
Esto es de vital importancia conocerlo ya queelDLLprincipalpuedeser extraído como cualquierotroarchivo incluidoen un
empaquetado ZIP y abierto con alguna herramienta para interpretacióndecódigo MSILcomo Reflector. Debido a esto, es importante
ofuscar elcódigoa través dealguna herramienta de Ofuscación preparada para ello. La siguientefigura muestra elEnsamblado
principal dela Aplicación siendo abierto por Reflector y mostrandoelcódigo intermedioquedejó el compilador deC#, e interpretado
de regresoa eselenguaje:
El Manifiesto dela Aplicación
Si abrimos elarchivoAppManifest.xamlqueincluyepor dentro el archivo XAP,podemos darnos cuenta que su contenido es diferente a
como lo tenemos en tiempodediseño dentro deVisualStudioen el paneldelExplorador deSoluciones. Esto es debido a quesus datos
se establecen únicamenteal compilarelproyecto deSilverlight.
El Manifiesto es unelementode tipo<Deployment>que tienelos siguientes atributos:
EntryPointAssembly
Indica cuáles elEnsamblado que debe iniciaralejecutar la Aplicación. Demanera predeterminada apuntará alEnsambladoprincipalde
la Aplicación.
EntryPointType
Indica cuáles la clasequedebeiniciar cuandola Aplicaciónejecute.Estoes análogopor ejemploa un aplicativo detipo Consola creada
con el lenguajeC#en dondecontamos con unmétodo static void Main() que representa el punto de entradadelaplicativo. Demanera
predeterminada esteatributo apuntará a la claseApp queincluyó automáticamente Visual Studio alcrear unproyecto detipo
Silverlight.
RuntimeVersion
Indica la versión deSilverlight con la que fuecompilada la Aplicación.Esteatributo tambiénes de particular importancia ya que será
este valor el que valide si elusuario tienela versiónmínima correcta para ejecutar la Aplicación deSilverlighto no.
Además, el elemento <Deployment>en el manifiestoincluirá una sección llamada <Deployment.Parts>la cualindica cuáles son todos
los Ensamblados que constituyen la Aplicación deSilverlight. Podemos deducir entonces queesta secciónestará directamente
relacionada con las referencias a Ensamblados externos queincluyamos.
La siguiente caja de texto muestra elcontenido completodelarchivoAppManifest.xamlrelacionado al proyecto que creamos con
anterioridad:
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" EntryPointAssembly="Fundamentos.Inicial"
EntryPointType="Fundamentos.Inicial.App" RuntimeVersion="4.0.50826.0">
<Deployment.Parts>
<AssemblyPartx:Name="Fundamentos.Inicial" Source="Fundamentos.Inicial.dll" />
</Deployment.Parts>
</Deployment>
Fundamentosde Silverlight–Parte7
Comprender el modelode compilación delas Aplicaciones deSilverlight es únicamenteelprimer paso. ¿Qué sucedecuandoa través de
un navegador,entramos a una página queincluyeun aplicativo deSilverlight?
Para responder a lo anterior es buena idea ejecutar el proyecto quetenemos en VisualStudiopresionandoF5. Visual Studio levantaráel
ASP.NET Development Server (antes conocidocomo “Cassini”), abrirá automáticamenteelnavegador quetenemos configurado como
predeterminado y solicitará la página .aspx (esa página es la queestá configurada como predeterminada,podemos cambiar este
comportamientosihacemos clicderechosobreelarchivo.html y seleccionamos la opción “SetAs StartPage…”).
Con la aplicación ejecutando dentro del navegador predeterminadopodemos observar que efectivamenteeltextodelbloque detexto
es cambiadopor la fecha y hora actual,tal y como loexpresamos a través de código anteriormente. ¡Hemos creado nuestra primera
Aplicación deSilverlight 4!
Detengámonos un pocoen elURL queestá enel navegador.
Podemos ver que setrata efectivamentedela página .aspxque
tenemos ennuestroproyecto Web relacionado. No obstante,
tambiénpodemos darnos cuenta que¡nuestra Aplicaciónde
Silverlight está ejecutando adentro dela página!
Las Aplicaciones Silverlightdebenser hospedadas enuna
página HTML comomínimo, pudiendo ser ASP, ASP.NET, JSP,
PHP, etc.
Además, taly como lo describimos alinicio,Silverlightes una
tecnología Webdel lado del Cliente y portal motivo todo el
cómputo y ejecuciónsucedeenla máquina del usuario, no en el
Servidor. Tomemos elbotón como ejemplo: alhacer Click en el
botón no está enviando la página deregreso al Servidorcomo
sucede con botones deASP.NET(elemento<asp:Button />). Nuestro código ejecuta de manera localy por talmotivopodemos
construir Aplicaciones altamentefuncionales y robustas,usando los lenguajes compatibles conla plataforma .NET(comoC#en este
caso). Lo anteriores de suma importancia tenerloen cuenta siempreya quees un paradigma unpoco diferente para los
desarrolladores detecnologías Web tradicionales.
Entonces,regresándonos a la pregunta inicial: ¿Qué sucedecuando a través deun navegador, entramos a una página queincluyeun
aplicativo deSilverlight? Acontinuaciónla respuesta:
1. El navegador realiza una petición a la página indicada en el URL
2. El Servidor recibe la petición,la interpreta y prepara la respuesta
3. La respuesta (HTML +Script) es enviada deregresoalnavegador
4. El navegador recibela respuesta y dibuja el HTML+Script
5. Al detectarla instancia de una Aplicaciónde Silverlight,solicita elarchivo XAPen cuestión (expresado en elparámetro “source”del
elemento <object>) y lo copia 100% del ServidoralCliente. Es duranteesta fasecuando vemos la ya tradicional pantalla deprecarga de
Silverlight: unas burbujas azules quedan vueltas e informanun porcentajede avance.Eseporcentaje deavancees elporcentajede
copiado delarchivo XAPdelServidor a la máquina delusuario.
6. Una vez copiado elarchivoXAP, es puesto en Cache comocualquier otroelementode la página Web,para queen una peti ción
subsecuente nolo vuelva a copiarsino que lo tome directamente delCachedel navegador.
Por esta razón, una delas mejores prácticas al construir soluciones conSilverlightes el archivo XAP(la Aplicación per sé) sea lomás
pequeña posible,para queel tiempo dedescarga sea lo más corto y la experiencia quetenga elusuario alusar nuestro aplicativosea
positiva. Simplementeimaginemos ¿qué pasaría sielarchivo XAPmidiera 30MB y el ancho debanda delusuario queestá consumiendo
la Aplicaciónes muy reducido? Nonecesitamos realmente analizar mucho la respuesta para determinarqueeltiempo decarga se
extendería a niveles inaceptables para la mayoría delas personas.
Hay diferentes mecanismos y prácticas para mejorar elrendimientoquepercibe el usuariode nuestra aplicación, siendo elreducirde
tamaño el XAPlo más quesea posible.Para lograrestopodemos utilizarla siguientetécnica que detallaremos a continuación.
Fundamentosde Silverlight–Parte8
Cacheo de Ensamblados
Como lo describimos en una secciónanterior,alcompilar unproyecto deSilverlightsecreará elempaquetado XAP quecontiene todos
los Ensamblados necesarios para poder ejecutar la Aplicación.Estos Ensamblados son parte delempaquetado para poder estar
disponibles demanera inmediata cuando la Aplicación este corriendo, noobstanteel tamaño dedichos archivos impacta demanera
directa eltamañofinal delarchivo XAP.
Cuando referenciamos Ensamblados externos, estos Ensamblados son incluidos comopartedel archivo XAP.Un ejemplo claro deesto
es el usodelcontrol DataGrid. El controlDataGrid es uncontrol que nos permitedesplegar datos demanera tabularen nuestros
aplicativos. No obstante,elcontrol DataGridno pertenecealnúcleo deSilverlightper se, sinoquees partedel SDKdeSilverlight.
Si arrastramos el controlDataGridde la caja de herramientas y lo soltamos en eldiseñador interactivo deVisual Studio podemos
percatarnos queporel simplehecho deestarlodeclarando, elDataGridreferencia los siguientes Ensamblados:
 System.ComponentModel.DataAnnotations.dll
 System.Windows.Controls.Data.dll
 System.Windows.Controls.Data.Input.dll
 System.Windows.Data.dll
La figura anterior muestra elcontenido delarchivo XAP, alhaber declaradoelcontrol DataGriddentro denuestra Aplicación. Como
podemos observar, los archivos que se incluyenahora son más, si locomparamos conla lista de archivos cuando inicialmentecreamos
el proyecto. Esto tambiénseve reflejado enel Manifiesto dela Aplicación:
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" EntryPointAssembly="Fundamentos.Inicial"
EntryPointType="Fundamentos.Inicial.App" RuntimeVersion="4.0.50826.0">
<Deployment.Parts>
<AssemblyPartx:Name="Fundamentos.Inicial" Source="Fundamentos.Inicial.dll" />
<AssemblyPartx:Name="System.ComponentModel.DataAnnotations" Source="System.ComponentModel.DataAnnotations.dll" />
<AssemblyPartx:Name="System.Windows.Controls.Data" Source="System.Windows.Controls.Data.dll" />
<AssemblyPartx:Name="System.Windows.Controls.Data.Input" Source="System.Windows.Controls.Data.Input.dll" />
<AssemblyPartx:Name="System.Windows.Data" Source="System.Windows.Data.dll" />
</Deployment.Parts>
</Deployment>
El elemento <Deployment.Parts>ahora incluye los archivos querequiereelcontrolDataGrid. Esto mismo sucedería al estar
referenciandocualquier tipo deEnsambladoexterno,ya sea deterceros o propio. En estemomento, elarchivoXAP mide
aproximadamente220KB ya empacado.
Si abrimos las propiedades delproyecto deSilverlight, encontraremos -entreotras opciones-la opción para reducir eltamañodel
archivo XAP, a través del Cacheo deEnsamblados.
Al compilar nuevamenteelproyecto deSilverlightnos podemos percatar dequeahora cada uno delos Ensamblados referenciados
(indicados en la lista anteriormente) ha sidoempaquetado en un archivo ZIP demanera individual, y cada unoha sido copiado al fólder
ClientBin, al lado del archivo XAPde la Aplicación.
Además, si abrimos nuevamenteel archivo XAPveremos quelos Ensamblados ya no sonincluidos como parte del XAP…
…que el tamaño del archivo seha reducido dramáticamente…
…y que el Manifiestode la Aplicación ha sido modificadopara indicar queahora esos Ensamblados son externos. Esto queda expresado
a través delelemento<Deployment.ExternalParts>como a continuación semuestra en la siguientecaja de texto:
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" EntryPointAssembly="Fundamentos.Inicial"
EntryPointType="Fundamentos.Inicial.App" RuntimeVersion="4.0.50826.0">
<Deployment.Parts>
<AssemblyPartx:Name="Fundamentos.Inicial" Source="Fundamentos.Inicial.dll" />
</Deployment.Parts>
<Deployment.ExternalParts>
<ExtensionPart Source="System.ComponentModel.DataAnnotations.zip" />
<ExtensionPart Source="System.Windows.Controls.Data.zip" />
<ExtensionPart Source="System.Windows.Controls.Data.Input.zip" />
<ExtensionPart Source="System.Windows.Data.zip" />
</Deployment.ExternalParts>
</Deployment>
Ahora la Aplicaciónha sido configurada para quelos ensamblados externos sean descargados de manera individual y sean colocadosen
el Cachedelnavegador peroúnicamentela primera vez,para queen ejecuciones subsecuentes de la Aplicación,los Ensamblados –sino
han sido modificados-los cargue directamente delCachey no del Servidor. Esto asegurará queúnicamentesea descargadoel archivo
XAP, que por elhechode haber reducidosu tamaño ahora la Aplicación cargará más rápido.
Esta técnica para reducir eltamaño delos archivos XAP funciona tantopara los Ensamblados quepertenecen al SDK deSilverlight,los
del Silverlight Toolkit einclusoen nuestros propios Ensamblados.Para hacer esto loúnico que necesitamos es crear un archivo XML de
metadatos para cada uno deellos.
Creación del Archivo de Mapeo
Para quepodamos Cachear Ensamblados propios, necesitamos crear unarchivo con el mismo nombrequeelEnsamblado encuestión
pero con extensiónextmap.xml.Por ejemplo, sinuestro Ensamblado sellamaseUtilerias.dll,elarchivo deMapeodeberá llamarse
Utilerias.extmap.xml y deberá estarallado delarchivo .dlloriginal.
El contenido del archivo deMapeo será elsiguiente:
<?xml version="1.0"?><manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<assembly>
<name>NOMBREDEL ENSAMBLADO</name>
<version>VERSION DEL ENSAMBLADO</version>
<publickeytoken>PUBLIC KEYTOKEN</publickeytoken>
<relpath>RUTA DEL DLL</relpath>
<extension downloadUri="NOMBREDEL ARCHIVO ZIP ADESCARGAR" />
</assembly>
</manifest>
Los elementos deberánempatar los valores del Ensambladoencuestión.Asimismo, debemos tomar en cuenta que el Ensamblado
deberá estar firmado con una llavedeStrong Name usando la utilería sn.exeo directamenteusando elpanel depropiedades del
proyecto del Ensamblado para crear la llavecriptográfica.
Comprobación del Cacheo deEnsamblados
Una manera sencilla para comprobarsielCacheo deEnsamblados está funcionandoo no es publicarla Aplicacióna unsitio Web
público y accesibley utilizar alguna herramienta deinspección comoFiddler.
En este casopublicaréla Aplicacióndeejemploen misitio rdiazconcha.coma través del copiado delos archivos vía FTP. Los archivos
publicados serán la página .aspx y elfólder ClientBin. El URLfinal para esteejemplode comprobación será:
http://rdiazconcha.com/Fundamentos/Fundamentos.InicialTestPage.aspx
Si abrimos Fiddlerpara inspeccionar todoel tráficode HTTPy abrimos un navegadorquehaga una petición al URLindicado nos
daremos cuenta queefectivamentela primera vez que ejecutamos la Aplicacióntodos los Ensamblados sondescargados posterior a la
descarga delarchivo XAPprincipal, ya queno existenen el Cachedelnavegador aún.
Si abrimos una nueva instancia delnavegador y volvemos a hacer una peticióna la misma página, nos daremos cuenta queni la
Aplicación nilos Ensamblados ya noserán descargados, sino tomados delCachedel navegador.
Ahora bien,sihacemos algún cambio enlos archivos ZIP delos Ensamblados –porejemploborrarlos de ClientBin y volvera recompilar
toda la Solución para queseregenereny tenganuna nueva estampa detiempo-y publicamos los archivos nuevamenteveremos que
efectivamente los archivos ZIPsondescargados nuevamente y no son tomados los del Cache. Para este ejemplovolvía publicar
únicamente el archivo System.Windows.Data.zip enmi sitiocon una nueva estampa detiempo. Al volver a hacer la petición dela
página elresultado que arroja Fiddlerserá elsiguiente:
De esta manera podemos comprobar que únicamente sedescargan los archivos quehayan sido actualizados, el resto serán adquiridos
a través delCache delnavegador encuestión.
Fundamentosde Silverlight–Parte9
Clase UserControl
Enfoquémonos ahora en MainPage.xaml por tratarsedeun archivo desuma importancia ya quees ahí dondeexpresamos la Interface
de Usuario para nuestra Aplicación. Si abrimos estearchivoen VisualStudiopodremos observarquesucódigo comienza con la
declaración deun elemento detipo <UserControl>. Es en este elemento en dondeseindica cuáles la clasedecódigo relacionada para
este código XAMLen específico, además de importarlos espacios de nombres requeridos por el intérpretede XAML(el único espacio
de nombres requeridopor el intérpretede XAMLes el indicado con la línea xmlns=”…”):
<UserControl x:Class="Fundamentos.Inicial.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"d:DesignWidth="400"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
…
La clase decódigorelacionada (Fundamentos.Inicial.MainPage) es en dondeescribiremos la funcionalidadquenecesitela aplicación,
por ejemplo,los manejadores deeventos para los controles, etc. La claseUserControl hereda indirectamentedela claseUIElementque
analizaremos a continuación.
Los espacios denombres (namespaces) mostrados enelcódigo anterior son necesarios cuando requerimos traer a nuestro ámbito las
clases y elementos queestos contienen.Estoes también ciertosideseas declararinstancias detus propios objetos a través de XAML.
Esto es análogoa la cláusula using enellenguaje deprogramaciónC#o la cláusula Imports enVisualBasic .NET. Los alias queutilizanlos
espacios denombres son totalmentearbitrarios y solamenteseutilizan para mejor legibilidad del código.
Fundamentosde Silverlight–Parte10
Clase UIElement
La clase UIElement es la clasebasepara todos los elementos visuales en Silverlight. En esta clasees en donde se definenla gran
mayoría de los eventos de interaccióncon el usuario(eventos delmouse, teclado, enfoque,etc.). Algunos delos eventos incluidos en
esta claseson:
 MouseLeftButtonDown
 MouseLeftButtonUp
 MouseRightButtonDown
 MouseRightButtonUp
 MouseEnter
 MouseLeave
 Drop
EventosRuteados
La mayoría de los eventos anteriores queexpone la clase UIElement son ruteados, esto es, soneventos quevan escalando desdelo más
profundo delárbolde objetos deXAML hacia arriba (a este término se ledenomina bubblingen inglés). En los argumentos deeste tipo
de eventos podremos encontrar la propiedad Handled, la cualindica sielevento sigueescalando o no.Debido a la naturaleza que
tienen los eventos ruteados podríamos crear manejadores de eventos globales para diversos elementos visuales.
Fundamentosde Silverlight–Parte11
Manejo de Eventos
En Silverlight tenemos tres maneras diferentes para poder manejar eventos.
 Desde XAML
 A través de código usando la sintaxis estándar
 A través de código usando Expresiones Lambda
Manejo de eventosusando XAML
Podemos manejar los eventos de los elementos usando XAML. La siguientecaja detextodemuestra el manejo del eventoClick del
control Button:
…
<Button Click="Button_Click" />
…
…y su código relacionadousandoel lenguajeC#:
private void Button_Click(objectsender,RoutedEventArgs e)
{
//Manejo delevento
}
Manejo de eventosusando lasintaxisdellenguaje
Como cualquierotroevento enC#, podemos usar eloperador sobrecargado +=para asignarelmétodoquedeseamos queseejecute
cuando elevento sea disparado. La siguientecaja detexto demuestra la asignación delmétodo button1_Click al eventoClick deun
botón:
this.button1.Click += new RoutedEventHandler(button1_Click);
private void button1_Click(object sender,RoutedEventArgs e)
{
//Manejo delevento
}
Manejo de eventosusando ExpresionesLambda
Las expresiones lambda son funciones anónimas quepodemos utilizar para creardelegados. El siguientecódigo muestra el uso deuna
ExpresiónLambda como manejadordelevento Click de unbotón.
//s es object y a es RoutedEventArgs
this.button1.Click += (s, a) =>
{
//Manejo delevento
};
Una de las ventajas claras de utilizar una Expresión Lambda es que nos ahorraremos elcuerpodel método que está manejando el
evento. Generalmenteenescenarios en dondenecesitemos crear contenidodinámico es de gran utilidad contar con esta posibilidad.
Application Class
Silverlight
Encapsulates a Silverlightapplication.
Inheritance Hierarchy
System.Object
System.Windows.Application
Namespace: System.Windows
Assembly: System.Windows (in System.Windows.dll)
Syntax
C#
VB
Copiar
public class Application
XAML Object Element Usage
Copiar
<Application.../>
The Application typeexposes thefollowing members.
Constructors
Name Description
Application Initializes a new instance ofthe Application class.
Top
Properties
Name Description
ApplicationLifetimeObjects Gets the applicationextension services that havebeen registeredfor this application.
Current Gets the Application objectfor thecurrent application.
HasElevatedPermissions Gets a valuethatindicates whether the applicationis running with elevated permissions.
Host Gets various details about the Silverlight application's host.
InstallState Gets the currentout-of-browser installationstateofthe application.
IsRunningOutOfBrowser Gets a valuethatindicates whether the applicationwas launched fromtheout-of-
browser state.
MainWindow Gets the out-of-browser application window.
Resources Gets a collection ofapplication-scoped resources, suchas styles, templates,and
brushes.
RootVisual Gets or sets themainapplication UI.
Windows Gets a collection ofthe Window instances thathavebeen created.
Top
Methods
Name Description
CheckAndDownloadUpdateAsync Launches an asynchronous process tocheck for anddownload an
updatedversion ofthe application.
Equals(Object) Determines whether the specified Object is equalto the currentObject.
(Inheritedfrom Object.)
Finalize Allows an objectto tryto freeresources andperformother cleanup
operations beforethe Object is reclaimedby garbage collection.
(Inheritedfrom Object.)
GetHashCode Serves as a hashfunction for a particular type.(Inherited fromObject.)
GetResourceStream(Uri) Returns a resource file froma location intheapplication package.
GetResourceStream(StreamResourceInfo,
Uri)
Returns a resource file froma location inthespecifiedzip package.
GetType Gets the Typeofthecurrent instance. (Inherited fromObject.)
Install Attempts toinstalltheapplication so thatit canrun outside the
browser.
LoadComponent Loads a XAML filethatis located atthespecifiedUniform Resource
Identifier (URI) and converts itto an instance oftheobjectthat is
specified by therootelement oftheXAML file.
MemberwiseClone Creates a shallow copy ofthecurrent Object.(Inherited fromObject.)
ToString Returns a string that represents thecurrent object. (Inherited from
Object.)
Top
Events
Name Description
CheckAndDownloadUpdateCompleted Occurs whentheapplication has finished checking for updates in responseto
a CheckAndDownloadUpdateAsync methodcall.
Exit Occurs just beforeanapplication shuts downand cannotbe canceled.
InstallStateChanged Occurs whenthe InstallStatepropertyvaluechanges.
Startup Occurs whenanapplication is started.
UnhandledException Occurs whenanexceptionthat is raisedby Silverlightis not handled.
Top
Remarks
Application is a class thatencapsulates a Silverlight application andprovides thefollowing services:
 ApplicationEntry Point
 ApplicationLifetime
 ApplicationManagement
 Application-Scoped Resources
 Unhandled Exception Detection
The entry point ina Silverlight application is theclass in your applicationassembly thatderives from Application.This class is known as
the application class. When theSilverlight plug-instarts, Silverlight uses metadata in theapplication packageto instantiatethe
application class. At this point, theapplication's lifetime starts. The lifetimeofan applicationoccurs inthefollowing order:
 Construction (Application)
 Initialization(Startup)
 Application Running
 ...
 Application Shutting Down(initiated by user)
 Exit (Exit)
By handling the Startup event, you can retrieveandprocess initializationparameters fromthe InitParams property ofthe
StartupEventArgs objectthat is passed to the Startup eventhandler. Initializationparameters are configured by using the initParams
property of theHTML objectelement that is usedto configureand instantiatetheSilverlight plug-in.
During startup,you can alsospecify the main applicationUI to showby setting theRootVisualproperty.
Once an applicationis running, the Application objectandits statecan beaccessed from the static Current property. Thesingleton
pattern ensures thatstatemanaged by Application, including sharedresources (Resources) and customproperties,is availablefrom a
single, application-scopedlocation.
XAML Usage Notesfor the Application class
In practical XAMLusage, Application is almost always therootelement oftheApp.xamlfileand therefore a practical usagewould
include theclient andXAML xmlns values,as wellas anx:Class valuefor thecode-behindthatinitiates the rootvisual, as shown inthe
following XAML fragment.
Copiar
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="namespace.class"...>
...
</Application>
Technically theXAML usagefor any member ofthe Application class thatsupports XAMLapplies bothto the Application class andalso
to any Applicationsubclass that does notspecifically disable XAMLusageby shadowing members or changing theaccess level ofits
constructors. However,theXAML usage for Application members shows the literal Applicationrather thantheplaceholder application
because subclassing Application is notnecessaryfor most Silverlight applicationmodelscenarios, and the XAML usageshows the most
common usagepatterns whenever possible.
Examples
The following codeexampledemonstrates howto use this class tomerge theXAML and code-behind portions ofa Pageclass.This code
is similar to the InitializeComponent methodthatVisual Studio generates for thesamepurpose.
Visual Studio generates the InitializeComponent methodwhen a XAML filehas a build actionof Page. To loada XAML file using the
following examplecode, set its build actionto Resource.
C#
VB
Copiar
private System.Windows.Controls.Grid LayoutRoot;
public Page()
{
System.Windows.Application.LoadComponent(this, newSystem.Uri(
"/SilverlightApplication1;component/Page.xaml",
System.UriKind.Relative));
this.LayoutRoot =((System.Windows.Controls.Grid)
(this.FindName("LayoutRoot")));
}
Version Information
Silverlight
Supported in: 5,4, 3
Silverlight for WindowsPhone
Supported in: Windows PhoneOS 7.1, Windows PhoneOS 7.0
Platforms
For a list of theoperating systems andbrowsers that are supported by Silverlight, see Supported Operating Systems andBrowsers.
Thread Safety
Any public static (Sharedin VisualBasic) members ofthis type arethreadsafe.Any instancemembers arenot guaranteed to bethread
safe.
See Also
Reference
System.Windows Namespace
Other Resources
ApplicationModel
Adding Silverlight toa Web Pageby Using HTML or JavaScript
Silverlight 4 Beta –SoporteparaArrastrar y Soltar en Mac OS X
En el artículoanterior vimos queuna delas características nuevas deSilverlight4 es su capacidad derecibir archivos queseestén
arrastrando desde afuera dela aplicación. No obstante,en Mac OS X es diferente el mecanismopara lograr esta funcionalidad ya que
en ese sistema operativo, una acción dearrastrary soltar nole avisa al APIde Silverlight delo ocurrido, a diferencia delo que sucede en
Windows.En esteartículo veremos la alternativa para implementaresta característica en Mac OS X. Cabemencionar que este
mecanismo funcionará enSafari, mientras que en FireFox sea probablequeno debido a la diferencia dearquitectura de este último en
el sistema operativo deApple.
El proyecto
Usaremos el proyecto anterior.
Modificaciones
Para implementar la funcionalidadde Arrastrar y Soltaren Mac OS X necesitaremos hacerlo a través de funciones de Javascript quele
avisenalplugin que una acción dearrastrar-soltar ha sucedido.Las funciones deJavascriptdeberán manejaralguno delos siguientes
eventos delelemento<OBJECT>o <EMBED>(según lo que hayamos usadopara instanciar Silverlight, ennuestrocasohemos usado
<OBJECT>)
 ondragenter
 ondragleave
 ondragover
 ondrop
Según la documentación deWeb Kit,de los eventos anteriores debemos comomínimo manejar ondragover, y dentro deél ejecutar
preventDefault() en el objeto deevento. Sino hacemos estono recibiremos ninguno delos cuatroeventos anteriores. Cabemencionar
que esto noestá explicado en elSDKde Silverlight 4 Beta pero probablementeesto sea aclaradoen sus futuras versiones.
Aclaradolo anterior, realizaremos las siguientes modificaciones alelemento <OBJECT>con el que estamos instanciando Silverlight:
<object id="sl"data="data:application/x-silverlight-2," type="application/x-silverlight-2"width="100%" height="100%"
ondragover="ManejaDragOver(event)" ondrop="ManejaDrop(event)">
// los parámetros quedan igual
</object>
Como podemos observar, las modificaciones son:
- Estamos agregando el atributoid, el cual nos permitirá invocar desdescript al elemento.
- Estamos manejando ondragover a través dela función ManejaDragOver. Asimismo a la función leestamos pasando elobjeto event el
cual tieneinformacióndelevento.
- Estamos manejando ondrop a través dela función ManejaDrop. Asimismoa la función leestamos pasando elobjeto event el cual
tiene informacióndel evento.
Ahora bien,debemos implementarlas funciones reciénexplicadas. Esto lo haremos en elbloque de<script>queya tenemos presente
en la página:
//El manejo deondragover y la ejecución depreventDefault()
//son requeridos segúnla documentaciónde WebKitlocalizada en:
//http://tuvix.apple.com/mac/library/documentation/AppleApplications/Conceptual/SafariJSProgTopics/Tasks/DragAndDrop.html
function ManejaDragOver(oEvent) {
oEvent.preventDefault();
}
function ManejaDrop(evento) {
// Previene las acciones por defaulten el DOM
evento.preventDefault();
// Obtiene el objetode Silverlight
var sl =document.getElementById("sl");
// Delega el eventoa Silverlight
var manejado =sl.dragDrop(evento);
// Si ha sidomanejado, evita la propagación del eventoen elDOM
if(manejado) evento.stopPropagation();
}
ondragover
La función ManejaDragOver únicamentehaceuna llamada a preventDefault() sobreel objetode evento. Esto para permitir que el
resto de eventos puedan serrecibidos (ver enla partedearriba la liga a la documentaciónde WebKit).
ondrop
La función ManejaDrop tambiénhaceuna llamada a preventDefault() para evitar las quelas acciones pordefault sucedan enel DOM
(ya que nosotros queremos hacer nuestro propio manejo). Posteriormenteobtieneelobjeto deSilverlight y ejecuta sufunción
dragDrop() pasando comoparámetroelobjeto deevento. Finalmentevalidamos quesielevento ha sidomanejado, evitela
propagación del eventoen el DOM.
Resultado
Como podemos apreciaren las siguientes figuras,alarrastrar unarchivo desdeafuera de la aplicación Silverlight enMacOS X, y
después soltarlo elarchivoseagregará al ListBox y comenzará su reproducción automáticamente,justocomo enel artículo anterior.
Resumen
Para implementar la funcionalidadde Arrastrar y Soltaren Mac OS X debemos hacerloa través descript enelDOMdebidoa las
diferencias en la arquitectura delas plataformas; no obstante es pefectamenteposible.En esteartículo detallamos los pasos necesarios
para hacerlo. Esto nos permitirá ofrecer a nuestros usuarios una experiencia estándar enelusode los aplicativos Silverlight que
construímos.
Puedes descargarelcódigo aquí.
Puedes ver eldemoen vivo aquí. Requiereelruntime Silverlight 4,AppleMacOS X y Safari.

Contenu connexe

Tendances

Historia del flash carlos moya 2 b2
Historia del flash carlos moya 2 b2Historia del flash carlos moya 2 b2
Historia del flash carlos moya 2 b2Charlie Moyashqui
 
Adobe flash player yupanqui b2
Adobe flash player   yupanqui b2Adobe flash player   yupanqui b2
Adobe flash player yupanqui b2Edison Fyp
 
Versiones de macromedia
Versiones de macromediaVersiones de macromedia
Versiones de macromediamishuhot
 
historia de flash por diego alban
historia de flash por diego albanhistoria de flash por diego alban
historia de flash por diego albandiego alban
 
Sistemas Operativos Moviles
Sistemas Operativos MovilesSistemas Operativos Moviles
Sistemas Operativos MovilesFacilitador -Tic
 
Herramientas de colaboración digital(3er gye tech)
Herramientas de colaboración digital(3er gye tech)Herramientas de colaboración digital(3er gye tech)
Herramientas de colaboración digital(3er gye tech)Adolfo Monar
 
Arquitectura de la plataforma de desarrollo de windows phone 7
Arquitectura de la plataforma de desarrollo de windows phone 7Arquitectura de la plataforma de desarrollo de windows phone 7
Arquitectura de la plataforma de desarrollo de windows phone 7videos
 
Presentación grupo 221120 68
Presentación grupo 221120  68Presentación grupo 221120  68
Presentación grupo 221120 68Leedy Garay
 
Plataforma .Net
Plataforma .NetPlataforma .Net
Plataforma .Netmellcv
 
Bajaña mera maria 2b2
Bajaña mera maria 2b2Bajaña mera maria 2b2
Bajaña mera maria 2b2mariabajana
 

Tendances (15)

Historia del flash carlos moya 2 b2
Historia del flash carlos moya 2 b2Historia del flash carlos moya 2 b2
Historia del flash carlos moya 2 b2
 
Adobe flash player yupanqui b2
Adobe flash player   yupanqui b2Adobe flash player   yupanqui b2
Adobe flash player yupanqui b2
 
Versiones de macromedia
Versiones de macromediaVersiones de macromedia
Versiones de macromedia
 
historia de flash por diego alban
historia de flash por diego albanhistoria de flash por diego alban
historia de flash por diego alban
 
Historia de macromedia flash
Historia de macromedia flashHistoria de macromedia flash
Historia de macromedia flash
 
Sistemas Operativos Moviles
Sistemas Operativos MovilesSistemas Operativos Moviles
Sistemas Operativos Moviles
 
Herramientas de colaboración digital(3er gye tech)
Herramientas de colaboración digital(3er gye tech)Herramientas de colaboración digital(3er gye tech)
Herramientas de colaboración digital(3er gye tech)
 
Parte 2
Parte 2Parte 2
Parte 2
 
Arquitectura de la plataforma de desarrollo de windows phone 7
Arquitectura de la plataforma de desarrollo de windows phone 7Arquitectura de la plataforma de desarrollo de windows phone 7
Arquitectura de la plataforma de desarrollo de windows phone 7
 
Historia flash
Historia flashHistoria flash
Historia flash
 
Visual basic
Visual basicVisual basic
Visual basic
 
Presentación grupo 221120 68
Presentación grupo 221120  68Presentación grupo 221120  68
Presentación grupo 221120 68
 
Plataforma .Net
Plataforma .NetPlataforma .Net
Plataforma .Net
 
Presentación1
Presentación1Presentación1
Presentación1
 
Bajaña mera maria 2b2
Bajaña mera maria 2b2Bajaña mera maria 2b2
Bajaña mera maria 2b2
 

En vedette

En vedette (6)

Bo 25 09-2012-54
Bo 25 09-2012-54Bo 25 09-2012-54
Bo 25 09-2012-54
 
Here's a complimentary cheet sheet
Here's a complimentary cheet sheetHere's a complimentary cheet sheet
Here's a complimentary cheet sheet
 
Tensioactivos
TensioactivosTensioactivos
Tensioactivos
 
How to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media PlanHow to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media Plan
 
Learn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionLearn BEM: CSS Naming Convention
Learn BEM: CSS Naming Convention
 
SEO: Getting Personal
SEO: Getting PersonalSEO: Getting Personal
SEO: Getting Personal
 

Similaire à Fundamentos de silverlight

Plataformas Móviles
Plataformas Móviles Plataformas Móviles
Plataformas Móviles ruth_1983
 
Grafico estadístico de los sistemas operativos mas usados
Grafico estadístico de los sistemas operativos mas usadosGrafico estadístico de los sistemas operativos mas usados
Grafico estadístico de los sistemas operativos mas usadosdavichodb
 
Sistemas operativos para celulares
Sistemas operativos para celularesSistemas operativos para celulares
Sistemas operativos para celularesJhoana Jhovis
 
Sistemas operativos-moviles-terminado
Sistemas operativos-moviles-terminadoSistemas operativos-moviles-terminado
Sistemas operativos-moviles-terminadoJhon Condori
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativosEdgar Lopez
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas OperativosCet-Mar #11
 
Expo sistema operativo
Expo sistema operativoExpo sistema operativo
Expo sistema operativoArantxa LR
 
Expo sistema operativo
Expo sistema operativoExpo sistema operativo
Expo sistema operativoArantxa LR
 
Sthefany leonlenguajec
Sthefany leonlenguajecSthefany leonlenguajec
Sthefany leonlenguajecSthefany Leon
 
Exposicion software en_la_actualidad
Exposicion software en_la_actualidadExposicion software en_la_actualidad
Exposicion software en_la_actualidadVictor Cones
 
Presupuestos o costos de
Presupuestos o costos dePresupuestos o costos de
Presupuestos o costos deberniedeguzman
 
Navegadores Web.docx
Navegadores Web.docxNavegadores Web.docx
Navegadores Web.docxJackLays
 
Capitulo 16 LA NUBE MÓVIL Y EL ECOSISTEMA DE APLICACIONES WEB
Capitulo 16 LA NUBE MÓVIL Y EL ECOSISTEMA DE APLICACIONES WEBCapitulo 16 LA NUBE MÓVIL Y EL ECOSISTEMA DE APLICACIONES WEB
Capitulo 16 LA NUBE MÓVIL Y EL ECOSISTEMA DE APLICACIONES WEBEdwin Ruiz
 

Similaire à Fundamentos de silverlight (20)

Plataformas Móviles
Plataformas Móviles Plataformas Móviles
Plataformas Móviles
 
Grafico estadístico de los sistemas operativos mas usados
Grafico estadístico de los sistemas operativos mas usadosGrafico estadístico de los sistemas operativos mas usados
Grafico estadístico de los sistemas operativos mas usados
 
Sistemas operativos para celulares
Sistemas operativos para celularesSistemas operativos para celulares
Sistemas operativos para celulares
 
Sistemas operativos-moviles-terminado
Sistemas operativos-moviles-terminadoSistemas operativos-moviles-terminado
Sistemas operativos-moviles-terminado
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Tecnologias Diseño Paginas Web
Tecnologias Diseño Paginas WebTecnologias Diseño Paginas Web
Tecnologias Diseño Paginas Web
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Android
AndroidAndroid
Android
 
Expo sistema operativo
Expo sistema operativoExpo sistema operativo
Expo sistema operativo
 
Expo sistema operativo
Expo sistema operativoExpo sistema operativo
Expo sistema operativo
 
Hardware y software
Hardware y softwareHardware y software
Hardware y software
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Sthefany leonlenguajec
Sthefany leonlenguajecSthefany leonlenguajec
Sthefany leonlenguajec
 
Exposicion software en_la_actualidad
Exposicion software en_la_actualidadExposicion software en_la_actualidad
Exposicion software en_la_actualidad
 
app
appapp
app
 
Presupuestos o costos de
Presupuestos o costos dePresupuestos o costos de
Presupuestos o costos de
 
Navegadores Web.docx
Navegadores Web.docxNavegadores Web.docx
Navegadores Web.docx
 
Capitulo 16 LA NUBE MÓVIL Y EL ECOSISTEMA DE APLICACIONES WEB
Capitulo 16 LA NUBE MÓVIL Y EL ECOSISTEMA DE APLICACIONES WEBCapitulo 16 LA NUBE MÓVIL Y EL ECOSISTEMA DE APLICACIONES WEB
Capitulo 16 LA NUBE MÓVIL Y EL ECOSISTEMA DE APLICACIONES WEB
 

Dernier

DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...Martin M Flynn
 
Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.profandrearivero
 
NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdfNUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdfEDNAMONICARUIZNIETO
 
historieta materia de ecologías producto
historieta materia de ecologías productohistorieta materia de ecologías producto
historieta materia de ecologías productommartinezmarquez30
 
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docxMagalyDacostaPea
 
ENSEÑAR ACUIDAR EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
ENSEÑAR ACUIDAR  EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.ENSEÑAR ACUIDAR  EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
ENSEÑAR ACUIDAR EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.karlazoegarciagarcia
 
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...GIANCARLOORDINOLAORD
 
HISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAHISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAJesus Gonzalez Losada
 
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Carol Andrea Eraso Guerrero
 
describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...DavidBautistaFlores1
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfssuser50d1252
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Angélica Soledad Vega Ramírez
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejormrcrmnrojasgarcia
 
Presentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxPresentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxRosabel UA
 
Cuadernillo de actividades eclipse solar.pdf
Cuadernillo de actividades eclipse solar.pdfCuadernillo de actividades eclipse solar.pdf
Cuadernillo de actividades eclipse solar.pdflizcortes48
 
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docxMagalyDacostaPea
 

Dernier (20)

DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
 
Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.
 
El Bullying.
El Bullying.El Bullying.
El Bullying.
 
NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdfNUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdf
 
historieta materia de ecologías producto
historieta materia de ecologías productohistorieta materia de ecologías producto
historieta materia de ecologías producto
 
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
ENSEÑAR ACUIDAR EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
ENSEÑAR ACUIDAR  EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.ENSEÑAR ACUIDAR  EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
ENSEÑAR ACUIDAR EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
 
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
 
HISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAHISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICA
 
Sesión ¿Amor o egoísmo? Esa es la cuestión
Sesión  ¿Amor o egoísmo? Esa es la cuestiónSesión  ¿Amor o egoísmo? Esa es la cuestión
Sesión ¿Amor o egoísmo? Esa es la cuestión
 
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
 
describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejor
 
Presentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxPresentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptx
 
Cuadernillo de actividades eclipse solar.pdf
Cuadernillo de actividades eclipse solar.pdfCuadernillo de actividades eclipse solar.pdf
Cuadernillo de actividades eclipse solar.pdf
 
¿Amor o egoísmo? Esa es la cuestión.pptx
¿Amor o egoísmo? Esa es la cuestión.pptx¿Amor o egoísmo? Esa es la cuestión.pptx
¿Amor o egoísmo? Esa es la cuestión.pptx
 
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
 

Fundamentos de silverlight

  • 1. Fundamentosde Silverlight–Parte1 ¿Qué esSilverlight? Silverlight es una tecnología quenos permite crear Aplicaciones Enriquecidas para Interneto RIApor sus siglas eninglés (Rich Internet Applications). Con Silverlight podemos construir aplicaciones quevandesde pequeños componentes dentro deuna página Web hasta sofisticadas Aplicaciones deNegocio que esténconsumiendoy presentando datos dealguna basededatos,pasando por juegos casuales, reproductores demultimedios,Gadgets para Windows Vista o 7, y unlargo etcétera. Incluso después demás de 3 años dehaber sido liberada al público engeneralsuprimera versión, aún existenmuchas confusiones y malinterpretaciones acerca de esta tecnología. Primeramente, tenemos quedecir queSilverlightes una tecnología multi-navegador, esto es,es capaz deejecutar adentro delos navegadores más comunes disponibles hoy en día: Internet Explorer,FireFox, Chrome y Safari. Por otro lado, Silverlight es una tecnología Multi-Plataforma, esto es,es capaz de ejecutar en los principales Sistemas Operativos disponibles hoy en día: Windows, MacOSX y Linux(a través de Moonlight, proyecto quees llevado a cabopor la empresa Novelly que es la implementación deSilverlight para eseSistema Operativo). Al momento deestarescribiendoestedocumento, Moonlight notieneparidad 1a 1 con las características de Silverlight 4.Para mayor informaciónpuedes consultarelroadmapde Moonlight enhttp://www.mono-project.com/MoonlightRoadmap Silverlight,a diferencia deotras tecnologías WebdelladodelServidor (por ejemplo: ASP.NET, PHP,etc.), es una tecnología del lado del Cliente, es decir, todoel cómputoy ejecuciónde las aplicaciones sucedeenel equipodel usuario,tal y como si se tratase decualquier tipo de aplicacióninstalada. Esto es una granventaja ya queSilverlightpuedesacar provechode las características de procesamiento del hardware en dondeestá instalado. Silverlight es unpluginqueofrece una experiencia deinstalación muysimilar a cualquier otro pluginpara los navegadores. En el caso de la versión 5 (que es la versión más nueva disponiblealmomentode estar escribiendo esto) tiene untamañoaproximado de7 MB para el caso delSistema Operativo Windows. Duranteel lanzamiento deSilverlight4 enAbril2010, se anunció que próximamentelas aplicaciones de Silverlight podrán ejecutar en electrónicos deuso comúnen nuestros hogares, comotelevisores,reproductores deDVD,reproductores deBlu-Rayy cajas decodificadoras decablepara la TV. Asimismo, Silverlight es una delas plataformas de desarrollopara la nueva versióndelSistema Operativomóvil deMicrosoft: Windows Phone7. En conjuntoconXNAcomo plataforma para la construcciónde juegos 2D / 3D, Silverlight ofrecea los desarrolladores de Aplicaciones móviles una plataforma robusta, fácil deaprendery con una oferta de herramientas conalta funcionalidad. Con lo anterior podemos deducir queSilverlightes una gran apuesta para ser una tecnología que sea capaz de ejecutar dela misma manera, endiferentes lugares: en los tres tipos depantalla más comunes en la vida de las personas hoy endía (equipos decómputo tradicionales comoPC’s o Laptops,Televisores y teléfonos móviles). Un mismo códigoejecutandoen diferentes dispositivos,con diferentes resoluciones, concaracterísticas de hardwarediferente.Es degranimportancia estoya quelos desarrolladores podrán reutilizar sus conocimientos existentes en tecnología .NETpara poder construir soluciones quelleguen a más personas y en lugares donde antes esto no era posible. (Actualización del20 dediciembre2011) Se presumequeelnuevodashboard deXbox liberadoen noviembre2011incluyeSilverlight comola plataforma dedesarrollopara sus aplicaciones. Sin embargo, aún nohaydocumentacióntécnica oficialaldía dehoy quehableacerca deello.  http://www.istartedsomething.com/20111206/the-future-of-xbox-is-apps-on-your-tv/  http://www.engadget.com/2011/10/10/microsoft-reportedly-preparing-silverlight-like-app-framework-ah/ Silverlight y HTML El propósito deSilverlight nunca ha sido reemplazarHTML como tecnología depresentación deInterfaces deUsuario, sino complementarla con características y funcionalidades queno están disponibles en dicha tecnología. Si bien HTML es unestándar que pretendeser implementado demanera única y consistenteen todos los navegadores disponibles hoy endía, esto en la práctica ha sido, es y será un proceso lento ya quepodemos destacar una falta de quórum entre las principales empresas que respaldan sus navegadores, quienes (paradójicamente) implementan las especificaciones deestándares demanera diferente.Además si hablamos en términos defuncionalidad,Silverlight ofrece más y mejores características.
  • 2. Otras consideraciones importantes son: Rendimiento El rendimiento delas Aplicaciones deSilverlightes superior gracias a que el códigoejecuta bajo elCommon Language Runtime(CLR), además dequecuenta conmúltiples hilos deejecución. Consistencia Silverlight se asegura derenderizar las Aplicaciones de manera consistente en cualquier lugar dondeestéejecutando Tiempo El tiempo deinnovaciónes un puntomuy importanteya quela evolución dela funcionalidad y características en las versiones futuras de Silverlightsucederánen unlapso detiempo muy corto, a comparaciónde las especificaciones deestándares como HTML. Para mayor información puedes consultarel siguiente artículo deBrad Becker, Directorde Administración deProductos, Plataformas de Desarrollo: http://team.silverlight.net/announcement/the-future-of-silverlight/ Silverlight y el .NETFramework Una característica muy importante acerca de Silverlight es que norequieredel .NETFramework tanto del lado del Clientecomo del lado del Servidor. Dellado delClientees obvio ya quees precisamentea esto quepodemos ejecutar aplicativos de Silverlight en Sistemas Operativos queno sean Microsoft Windows. Ymás aún, también es independientedel.NETFramework delladodelServidor: noes necesario tener instalado Internet Information Services (IIS) en nuestro Servidor Web, también puede ser Apache, Tomcat,etc. (Actualización del16 deseptiembre2011) Silverlight y Windows8 Duranteel primerkeynotedel evento//Build/ quesellevó a cabo del 13 al 16deSeptiembreenAnaheim,CA., se mostróalmundo entero la plataforma dedesarrollode aplicaciones enelpróximo Sistema Operativo deMicrosoft: Windows8.En Windows 8habrá dos categorías deaplicaciones: AplicacionesMetro, las cuales están enfocadas a dispositivos táctiles comotablets y Aplicacionesde Escritorio, las cuales sonlas aplicaciones deventanas que todos conocemos con mecanismos deentrada tradicional deteclado y mouse, porejemplo, Aplicaciones deNegocio(LOB por sus siglas eninglés),Aplicaciones detipo OLTP,Herramientas, etc. La plataforma dedesarrollo para las Aplicaciones deEscritorio está basada en .NETy Silverlight,tal y como sucede hoy en día, por lo que no hay ningúntipo decambio con respecto a las aplicaciones actuales. Por otro lado, la plataforma de desarrollo para las Aplicaciones Metro está basada en Windows Runtime(WinRT, un API orientada a objetos alterna a Win32) y XAMLo HTML. El motorde interpretaciónde XAMLha sido incorporadoalcore del Sistema Operativo ¡por lo que ahora más que nunca es muy importanteconocer y dominar esteimportantelenguaje! Como podrás observaren la ilustraciónanterior,en Windows 8 el .NETFramework y Silverlightsiguen siendolas plataformas principales para la creaciónde Aplicacionesde Escritorio, ya quesibien es importanteun soporte nativoa los dispositivos con pantallas táctiles, hay muchos escenarios en dondeno hace sentido teneruna aplicación deesteestilo, por lo que las Aplicaciones deEscritorio seguirán siendola principalcategoría durantemuchos años por venir.
  • 3. Fundamentosde Silverlight–Parte2 Versionesde Silverlight La historia de Silverlightseremonta alaño 2007,cuando aún se denominaba WPF/e(acrónimodeWindows PresentationFoundation / everywhere,debido a su íntima relación con esa tecnología y portener como objetivoser precisamente multi-plataforma). En aquel tiempo fue liberada alpúblico la versión 1.0,quesuobjetivoprincipalmente estaba enfocado en la reproducciónde multimedios. El modelo de programación deesta primera versión estaba reducido a utilizar JavaScriptcomo lenguajepara la construcciónde aplicaciones e incluía únicamente figuras básicas y textopara crear las Interfaces deUsuario. Fue hasta la versión 1.1 que Microsoft habría anunciado estaría disponiblela plataforma de desarrollo de.NETpara poder construir aplicaciones ya queSilverlightincluiría una implementación del CLR. Esta versión fueposteriormenterenombrada a Silverlight 2,por tratarsede una liberación con una gran cantidad decambios y mejoras y que merecía una asignación deversiónmayor. Fuea partirde este momento en dondemuchos desarrolladores y empresas voltearon a ver esta tecnología, ya queenpocas palabras, significaba poderprogramar con la comodidad y robustez de VisualStudio.NETy con alguno de los lenguajes dedicha plataforma,pero no únicamente para Windows sino para Mac también. Posteriormentefue anunciada la versión 3 que incluiría más y mejores características pero ahora enfocadas principalmentea la construcción deaplicaciones de negocio. Características como ejecución Afuera delNavegador, más controles para datos, elFramework de Navegación,PixelShaders, soporte para ClearType, Conexiones Locales y una grancantidadde componentes fueronliberadas en esta versión. En Silverlight 4 se agregaronmás características para Aplicaciones de Negocio,como la Confianza Elevada, con la cual prácticamenteno hay ningún límiteenlo que puedenhacer las aplicaciones de Silverlight. [Acualizacióndel 14/Ene/2012] Silverlight paraWindows Phone 7.1(nombre clave "Mango") –la nuevaversión delSistema Operativo móvilde Microsoft está basado en Silverlight 4. Esto quiere decirque lagran mayoría de las características incorporadas en Silverlight 4están disponibles en las aplicaciones paraWindows Phone 7.1; soloalgunas cosas contadas noestarán disponibles. Paramayor información consultaesta página. [Acualizacióndel 14/Ene/2012] La última versión disponibledeSilverlight al momento deestarescribiendoestetextoes Silverlight 5,liberadoduranteel día 09de Diciembre2011la cual incluye aúnmás características y componentes específicamente enfocados (sin estar sujetos únicamente a) a la creación deAplicaciones deNegocio: Confianza Elevada en aplicaciones dentrodelnavegador, p/Invoke, soportea Múltiples Ventanas, Plantillas deDatos Implícitas,EnlaceAncestor Relative, Extensiones del Marcado Personalizadas,Soportea 64 bits, entre muchos otros. Para mayor información consulta esta página. Gracias a lo anterior, Silverlightseestá convirtiendo cada vez más en la plataforma elegida y preferida para eldesarrollode aplicativos de negocio, modernos,multi-plataforma,con alta funcionalidad y respaldadas por robustas herramientas bien conocidas en el ámbito del desarrollo en .NET.
  • 4. Fundamentosde Silverlight–Parte3 Plataformasy NavegadoresSoportados Silverlight 4 soporta las siguientes versiones de Sistemas Operativos: SistemaOperativo Versiones Windows Windows 2000 SP4, Windows XP, Windows Vista, Windows 7, Windows 8 Mac OS 10.4.11en adelante Linux A través de Moonlight* *Al día de hoy, Moonlightno tiene una paridad1:1en funcionalidad conSilverlight4, por lo que probablementeno todas las aplicaciones ejecutendela misma manera en esesistema operativo. Para mayor información acerca de Moonlightpuedes consultar su sitio oficial. Silverlight 4 soporta los siguientes navegadores:  Firefox 2+  InternetExplorer 6+  Chrome 4+  Safari 4+
  • 5. Fundamentosde Silverlight–Parte4 Herramientasrelacionadas Si bien es técnicamenteposiblepodercrear una aplicación deSilverlighthaciendousosimplemente delBlocdeNotas, al hacer esto lo único que estaríamos haciendoes demostrar lo geek quesomos y quetalvez tenemos mucho tiempo libre.Es porestoquesiempre debemos utilizar herramientas que nos permitan serlo más eficientes quepodamos, y quenuestro tiempo seenfoqueúnicamente a resolver los problemas queestamos tratando deresolverinicialmentealcrear una aplicación. La herramienta porexcelencia para la creaciónde aplicaciones –no solodeSilverlight,sino en general de.NET-es VisualStudio.NET. La última versión deesta herramienta (por lomenos al estarescribiendo este texto) es VisualStudio.NET2010. Existen una gran cantidad de ediciones de VisualStudio.NET2010 y cualquier edición nos servirá para construir aplicativos deSilverlight4, desdela versión Ultimateque es la más completa hasta la versión VisualWebDeveloperExpress 2010 que es totalmentegratuita y es extraordinaria opción para iniciarse en elmundode desarrollo deaplicaciones Web con .NET. Nos referiremos como “Visual Studio .NET” entodo este libro a cualquier ediciónquehayas instaladode la versión 2010. Tener instaladoVisual Studio .NETes insuficiente,ya que únicamente traesoportepara la versión deSilverlight3. Para poder tener soporte a la versión4 debemos descargare instalar las herramientas de VisualStudio.NET2010 para Silverlight 4.Esta es una descarga de aproximadamente25MB y que una vez quelas hayas instalado se habrán incluido los siguientes componentes:  El motor de ejecuciónde Silverlight 4 para desarrollo y depuración  SDK de Silverlight 4  Una actualizaciónpara Visual Studio .NETpara soportar Silverlight 4  WCF RIAServices HerramientasOpcionales Prácticamentecon loanterior tenemos todolo necesariopara comenzar a construir aplicativos de Silverlight 4.No obstante, hay una gran cantidadde herramientas y programas que podemos utilizar para poder hacernuestrotrabajomás sencillo. Acontinuación, se enlistanalgunas delas más destacables. Expression Blend 4 Herramienta enfocada para el diseño deInterfaces deUsuarioconSilverlight y WPF. Si bien esta herramienta la estoy considerando como opcional -porquetécnicamente noes requisito-es de suma importancia y altamenterecomendable quetambién la tengamosa la mano para poder editarelcódigo XAMLde una manera más fácil. ExpressionBlend está enfocada al rol dediseñador e incluye diferentes características que en VisualStudio.NETno es posibleencontrar, como por ejemplo: la creación y edición deStoryboards de animaciones, manejoy administraciónde los Diccionarios deRecursos, creaciónde Estilos,modificaciónde Plantillas deControles,etc. Para mayor información consulta http://www.microsoft.com/Expression. Windows Phone 7Developer Tools Estas son las herramientas necesarias para construir aplicaciones para Windows Phone7. Incluyelas plantillas necesarias para Visual Studio .NET y el Emulador deWindows Phone7 para poderdepurarnuestrocódigo.Para mayor informaciónconsulta http://www.windowsphone7.com. Silverlight Toolkit Por cuestiones detamaño, el plugin deSilverlightincluye unnúmero limitadode controles que podemos utilizarsin necesidadde referenciar alguna biblioteca externa. El Silverlight Toolkites un proyecto decódigo fuente abiertosoportado y respaldado por Microsoft endonde podemos encontrar una grancantidadde controles extra para Silverlight. Para mayorinformaciónconsulta http://www.codeplex.com/Silverlight. Deep Zoom Composer Herramienta quenos ayuda a procesarimágenes para sudespliegue en elcontrol MultiScaleImage(imágenes quetienen una secuencia de tamaños y resoluciones para poder construir aplicaciones de tipoDeepZoom). Para mayor información consulta http://www.microsoft.com/downloads.
  • 6. Fiddler Fiddler nos permite inspeccionar todo el tráfico que sucedeen HTTP o HTTPS.Nos ayuda a conocer a detalle las peticiones y respuestas que están sucediendo cuandonos estamos comunicandodesde nuestro aplicativo deSilverlighta algúnlado. Para mayor información consulta http://www.fiddler2.com. Reflector Nos permite inspeccionar los ensamblados de.NETy conocer su código original.Para mayorinformaciónconsulta http://www.red- gate.com/products/reflector. Silverlight Spy Silverlight Spy es una herramienta que nos permiteinspeccionaruna aplicación deSilverlightcuando seestá ejecutando,su árbolde elementos visuales, sucódigo XAML e incluso su códigofuente. Para mayor información consulta http://firstfloorsoftware.com. Control Bing Maps El control de Bing Maps para Silverlightes un controlquenos ayuda a poner unmapa ennuestras aplicaciones para incluir características degeo localización. Para mayor información consulta http://www.microsoft.com/downloads.
  • 7. Fundamentosde Silverlight–Parte5 Estructurade losProyectos Comencemos creando unnuevo proyecto deSilverlight 4. Al igualquecualquier otro tipo deproyecto alutilizar VisualStudio.NET podemos seleccionar detoda la lista de plantillas quetengamos instaladas la adecuada para nuestros propósitos. La siguiente figura muestra la caja de diálogo decreaciónde unnuevo proyecto enVisual Studio .NET. Notemos quela enla sección de plantillas instaladas en la parte izquierda tieneseleccionada la opción de“Silverlight”. Al hacer esto nos mostrará la lista detodas las plantillas instaladas para esta plataforma. Figura 2: NuevoProyectode Silverlight Al hacer clic en elbotón “OK” Visual Studio nos mostrará otra caja dediálogo la cual contieneinformación relacionada alproyectoque estamos creando. Porejemplo, nos preguntará sideseamos uncrear un proyecto Web relacionado. La necesidadde crearun proyecto Web relacionado o no lodetallaremos más adelante. Asimismonos ofrecela opciónde seleccionar la versión deSilverlighta la que queremos apuntar;esta es una opción bastanteútil si estamos creandopor ejemplo unEnsamblado para unproyectode Silverlight para Windows Phone 7quenecesitemos compartir su funcionalidadpara un proyecto deSilverlight 4. Porúltimo, la caja de diálogo nos preguntará sideseamos habilitar los WCF RIAServices para este proyecto encuestión (demanera predeterminada esto no estará habilitado). La Figura 3 muestra la caja dediálogocon todas las opciones queestamos detallando: Figura 3: Opciones iniciales
  • 8. En lo que a nuestra aplicaciónrespecta, aceptaremos todos los valores predeterminados y haremos clic en el botón OK deesta caja de diálogo. Al hacerestoVisual Studio cerrará la ventana y creará una Solución con elmismo nombre que indicamos enel pasoanterior y dos proyectos, un proyecto para nuestra aplicación deSilverlight4 y otroproyecto será el proyecto Web (queelegimos sícrear enel paso queacabamos dedescribir). Figura 4: Estructura dela Solución Proyecto de Silverlight El proyecto deSilverlightincluye diversos elementos queautomáticamenteincluyeVisualStudio por nosotros.Acontinuación los enlistamos y describimos: Fólder “Properties” AppManifest.xml Manifiesto dela Aplicación deSilverlight. AssemblyInfo.cs Archivo que incluyeatributos globales para elEnsamblado dela Aplicación deSilverlight. Fólder “References” Muestra la referencias a Ensamblados de.NETquetieneactualmenteelproyecto. App.xaml En la práctica, es posible borrar ambos archivos App.xaml y su code-behind y compilar así el proyecto: nocausará ningúntipode error en la compilación. No obstante,al hacer esto únicamente veremos la animacióninicialde Silverlightsin ningún tipode funcionalidad adicional. Moraleja: déjalos como están El archivo App.xamlrepresenta elXAML global para la Aplicación. En él podemos declararrecursos globales y/o referencias a Diccionarios deRecursos externos. Debemos tener un archivo deesta naturaleza encada Aplicación deSilverlight.Su nombree s totalmente arbitrario. App.xaml.cs Archivo de code-behindpara la Aplicación. En élencontraremos los manejadores deeventos globales para la Aplicación. MainPage.xaml Representa la “pantalla” principal para la Aplicación.Estearchivocomúnmentese abreautomáticamenteeneldiseñador interactivode Visual Studio. Su nombrees totalmentearbitrario. MainPage.xaml.cs Archivo de code-behindpara la pantalla principalde la Aplicación.En él escribiremos los manejadores deeventos y códigoengeneral para darlefuncionalidad a nuestroaplicativo. Proyecto Web Este proyectoes creado únicamente si así loindicamos enla caja dediálogo deopciones iniciales como se muestra enla Figura 3. Este proyecto está estructurado demanera predeterminada como a continuación seindica:
  • 9. Fólder “Properties” Incluye elarchivoAssemblyInfo.cs específicopara elproyecto Web Fólder “References” Indica los Ensamblados referenciados en el proyecto Fólder ClientBin El fólder ClientBines elfólder destino en dondesecopiará la Aplicaciónde Silverlight automáticamentecuandocompila. Su nombrees totalmente arbitrario. Páginas XXXTestPage.aspxy XXXTestPage.html Los archivos .aspxy .html que incluyeelproyectoWebnos serviránpara probar la Aplicación deSilverlightadentrode unna vegador ya que incluyenpor dentro el elemento <object>querepresenta la instancia del aplicativo comotal. Sus nombres son totalmente arbitrarios. Silverlight.js Este archivo incluye diversas funciones para elhospedaje dela Aplicación deSilverlighten páginas html. Web.config Archivo de configuración propio del proyecto deASP.NET Agregando un poco de funcionalidad… A través deldiseñador interactivo enVisualStudio y la caja deherramientas agreguemos un botón(controlButton) y un bloquede texto (elemento TextBlock) a MainPage.xamltal y como lomuestra la siguiente figura: Al agregar cada uno delos elementos podemos observar que el código XAML deMainPage.xamles modificadoautomáticamentepor Visual Studio, esa es precisamentela finalidaddeldiseñador interactivo: el permitirnos crear y modificar nuestra Interface deUsuario sin necesidadde escribir elcódigoXAML de manera manual. Ahora bien,hagamos doble-clicenel botón para queVisualStudiocree automáticamente el manejadordelevento predeterminadode dicho control, enestecaso elevento Click. En elevento Click cambiaremos el texto delbloquedetextopor la fecha y hora actual.La siguiente caja de texto muestra elcódigo completodel manejador delevento: 1: private voidbutton1_Click(object sender,RoutedEventArgs e) 2: { 3: textBlock1.Text =DateTime.Now.ToString(); 4: } Esta será toda la funcionalidad queimplementemos porelmomento.Ahora vayamos a analizarconmás detalleelmodelo de compilaciónde las Aplicaciones de Silverlight.
  • 10. Fundamentosde Silverlight–Parte6 Modelo de Compilación El proyecto deSilverlightno es más queun proyecto detipo Class Library (Biblioteca deClases). Estoquieredecir que cuando compilamos el proyecto dela Aplicaciónde Silverlight el resultadode la compilación será un Ensambladollamado NombreDelProyecto.dll, dondeNombreDelProyecto es el nombre que indicamos al crear unnuevo proyecto deestetipo. Además delo anterior, elproyectode Silverlight está preparadopara queposteriormente dehaber compilado el archivoDLL, se empaqueteenun archivoconextensión .xap. El archivo XAP (pronunciado “ZAP”) es copiado automáticamenteal fólderClientBin en el proyecto Web relacionado. Todoestolo hará VisualStudiosin nuestra intervención. Ahora bien,¿quées elarchivo XAP? El Archivo XAP El archivo XAP representa el aplicativo deSilverlightcomo tal, es decir, el archivoXAP es la unidad dedespliegue delas aplicaciones de Silverlight.Si bien su extensiónes totalmentearbitraria, elarchivo XAP es un empaquetado detipo ZIP que por dentro incluyetodos los elementos necesarios para la correcta ejecución dela Aplicación deSilverlight. Esto lo podemos demostrar sicambiamos la extensión del archivo por .zipcomo a continuaciónmuestra la siguiente figura: Figura 5: Contenido del Archivo XAP La figura muestra WinRAR –una utilería para la apertura o creación dearchivos ZIP, RAR entreotros-y el contenidode dicho archivo. Podemos apreciarentonces queel archivo XAPincluye: el Ensambladoprincipaldela Aplicacióny el Manifiesto dela Aplicaci ón (archivo AppManifest.xaml). Ensamblado Principal El Ensamblado Principal es elresultado dela compilación del proyecto deSilverlighty no es diferente a cualquier otro DLL de.NETque hayamos utilizadocon anterioridad. Por lotanto, elEnsamblado será código MSIL(Código Intermedio deMicrosoft,por su acrónimoen inglés MicrosoftIntermediate Language) el cual todo compiladorde .NETestá preparado para generar. Esto es de vital importancia conocerlo ya queelDLLprincipalpuedeser extraído como cualquierotroarchivo incluidoen un empaquetado ZIP y abierto con alguna herramienta para interpretacióndecódigo MSILcomo Reflector. Debido a esto, es importante ofuscar elcódigoa través dealguna herramienta de Ofuscación preparada para ello. La siguientefigura muestra elEnsamblado principal dela Aplicación siendo abierto por Reflector y mostrandoelcódigo intermedioquedejó el compilador deC#, e interpretado de regresoa eselenguaje:
  • 11. El Manifiesto dela Aplicación Si abrimos elarchivoAppManifest.xamlqueincluyepor dentro el archivo XAP,podemos darnos cuenta que su contenido es diferente a como lo tenemos en tiempodediseño dentro deVisualStudioen el paneldelExplorador deSoluciones. Esto es debido a quesus datos se establecen únicamenteal compilarelproyecto deSilverlight. El Manifiesto es unelementode tipo<Deployment>que tienelos siguientes atributos: EntryPointAssembly Indica cuáles elEnsamblado que debe iniciaralejecutar la Aplicación. Demanera predeterminada apuntará alEnsambladoprincipalde la Aplicación. EntryPointType Indica cuáles la clasequedebeiniciar cuandola Aplicaciónejecute.Estoes análogopor ejemploa un aplicativo detipo Consola creada con el lenguajeC#en dondecontamos con unmétodo static void Main() que representa el punto de entradadelaplicativo. Demanera predeterminada esteatributo apuntará a la claseApp queincluyó automáticamente Visual Studio alcrear unproyecto detipo Silverlight. RuntimeVersion Indica la versión deSilverlight con la que fuecompilada la Aplicación.Esteatributo tambiénes de particular importancia ya que será este valor el que valide si elusuario tienela versiónmínima correcta para ejecutar la Aplicación deSilverlighto no. Además, el elemento <Deployment>en el manifiestoincluirá una sección llamada <Deployment.Parts>la cualindica cuáles son todos los Ensamblados que constituyen la Aplicación deSilverlight. Podemos deducir entonces queesta secciónestará directamente relacionada con las referencias a Ensamblados externos queincluyamos. La siguiente caja de texto muestra elcontenido completodelarchivoAppManifest.xamlrelacionado al proyecto que creamos con anterioridad: <Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" EntryPointAssembly="Fundamentos.Inicial" EntryPointType="Fundamentos.Inicial.App" RuntimeVersion="4.0.50826.0"> <Deployment.Parts>
  • 13. Fundamentosde Silverlight–Parte7 Comprender el modelode compilación delas Aplicaciones deSilverlight es únicamenteelprimer paso. ¿Qué sucedecuandoa través de un navegador,entramos a una página queincluyeun aplicativo deSilverlight? Para responder a lo anterior es buena idea ejecutar el proyecto quetenemos en VisualStudiopresionandoF5. Visual Studio levantaráel ASP.NET Development Server (antes conocidocomo “Cassini”), abrirá automáticamenteelnavegador quetenemos configurado como predeterminado y solicitará la página .aspx (esa página es la queestá configurada como predeterminada,podemos cambiar este comportamientosihacemos clicderechosobreelarchivo.html y seleccionamos la opción “SetAs StartPage…”). Con la aplicación ejecutando dentro del navegador predeterminadopodemos observar que efectivamenteeltextodelbloque detexto es cambiadopor la fecha y hora actual,tal y como loexpresamos a través de código anteriormente. ¡Hemos creado nuestra primera Aplicación deSilverlight 4! Detengámonos un pocoen elURL queestá enel navegador. Podemos ver que setrata efectivamentedela página .aspxque tenemos ennuestroproyecto Web relacionado. No obstante, tambiénpodemos darnos cuenta que¡nuestra Aplicaciónde Silverlight está ejecutando adentro dela página! Las Aplicaciones Silverlightdebenser hospedadas enuna página HTML comomínimo, pudiendo ser ASP, ASP.NET, JSP, PHP, etc. Además, taly como lo describimos alinicio,Silverlightes una tecnología Webdel lado del Cliente y portal motivo todo el cómputo y ejecuciónsucedeenla máquina del usuario, no en el Servidor. Tomemos elbotón como ejemplo: alhacer Click en el botón no está enviando la página deregreso al Servidorcomo sucede con botones deASP.NET(elemento<asp:Button />). Nuestro código ejecuta de manera localy por talmotivopodemos construir Aplicaciones altamentefuncionales y robustas,usando los lenguajes compatibles conla plataforma .NET(comoC#en este caso). Lo anteriores de suma importancia tenerloen cuenta siempreya quees un paradigma unpoco diferente para los desarrolladores detecnologías Web tradicionales. Entonces,regresándonos a la pregunta inicial: ¿Qué sucedecuando a través deun navegador, entramos a una página queincluyeun aplicativo deSilverlight? Acontinuaciónla respuesta: 1. El navegador realiza una petición a la página indicada en el URL 2. El Servidor recibe la petición,la interpreta y prepara la respuesta 3. La respuesta (HTML +Script) es enviada deregresoalnavegador 4. El navegador recibela respuesta y dibuja el HTML+Script 5. Al detectarla instancia de una Aplicaciónde Silverlight,solicita elarchivo XAPen cuestión (expresado en elparámetro “source”del elemento <object>) y lo copia 100% del ServidoralCliente. Es duranteesta fasecuando vemos la ya tradicional pantalla deprecarga de Silverlight: unas burbujas azules quedan vueltas e informanun porcentajede avance.Eseporcentaje deavancees elporcentajede copiado delarchivo XAPdelServidor a la máquina delusuario. 6. Una vez copiado elarchivoXAP, es puesto en Cache comocualquier otroelementode la página Web,para queen una peti ción subsecuente nolo vuelva a copiarsino que lo tome directamente delCachedel navegador.
  • 14. Por esta razón, una delas mejores prácticas al construir soluciones conSilverlightes el archivo XAP(la Aplicación per sé) sea lomás pequeña posible,para queel tiempo dedescarga sea lo más corto y la experiencia quetenga elusuario alusar nuestro aplicativosea positiva. Simplementeimaginemos ¿qué pasaría sielarchivo XAPmidiera 30MB y el ancho debanda delusuario queestá consumiendo la Aplicaciónes muy reducido? Nonecesitamos realmente analizar mucho la respuesta para determinarqueeltiempo decarga se extendería a niveles inaceptables para la mayoría delas personas. Hay diferentes mecanismos y prácticas para mejorar elrendimientoquepercibe el usuariode nuestra aplicación, siendo elreducirde tamaño el XAPlo más quesea posible.Para lograrestopodemos utilizarla siguientetécnica que detallaremos a continuación.
  • 15. Fundamentosde Silverlight–Parte8 Cacheo de Ensamblados Como lo describimos en una secciónanterior,alcompilar unproyecto deSilverlightsecreará elempaquetado XAP quecontiene todos los Ensamblados necesarios para poder ejecutar la Aplicación.Estos Ensamblados son parte delempaquetado para poder estar disponibles demanera inmediata cuando la Aplicación este corriendo, noobstanteel tamaño dedichos archivos impacta demanera directa eltamañofinal delarchivo XAP. Cuando referenciamos Ensamblados externos, estos Ensamblados son incluidos comopartedel archivo XAP.Un ejemplo claro deesto es el usodelcontrol DataGrid. El controlDataGrid es uncontrol que nos permitedesplegar datos demanera tabularen nuestros aplicativos. No obstante,elcontrol DataGridno pertenecealnúcleo deSilverlightper se, sinoquees partedel SDKdeSilverlight. Si arrastramos el controlDataGridde la caja de herramientas y lo soltamos en eldiseñador interactivo deVisual Studio podemos percatarnos queporel simplehecho deestarlodeclarando, elDataGridreferencia los siguientes Ensamblados:  System.ComponentModel.DataAnnotations.dll  System.Windows.Controls.Data.dll  System.Windows.Controls.Data.Input.dll  System.Windows.Data.dll La figura anterior muestra elcontenido delarchivo XAP, alhaber declaradoelcontrol DataGriddentro denuestra Aplicación. Como podemos observar, los archivos que se incluyenahora son más, si locomparamos conla lista de archivos cuando inicialmentecreamos el proyecto. Esto tambiénseve reflejado enel Manifiesto dela Aplicación: <Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" EntryPointAssembly="Fundamentos.Inicial" EntryPointType="Fundamentos.Inicial.App" RuntimeVersion="4.0.50826.0"> <Deployment.Parts> <AssemblyPartx:Name="Fundamentos.Inicial" Source="Fundamentos.Inicial.dll" /> <AssemblyPartx:Name="System.ComponentModel.DataAnnotations" Source="System.ComponentModel.DataAnnotations.dll" /> <AssemblyPartx:Name="System.Windows.Controls.Data" Source="System.Windows.Controls.Data.dll" /> <AssemblyPartx:Name="System.Windows.Controls.Data.Input" Source="System.Windows.Controls.Data.Input.dll" /> <AssemblyPartx:Name="System.Windows.Data" Source="System.Windows.Data.dll" /> </Deployment.Parts>
  • 16. </Deployment> El elemento <Deployment.Parts>ahora incluye los archivos querequiereelcontrolDataGrid. Esto mismo sucedería al estar referenciandocualquier tipo deEnsambladoexterno,ya sea deterceros o propio. En estemomento, elarchivoXAP mide aproximadamente220KB ya empacado. Si abrimos las propiedades delproyecto deSilverlight, encontraremos -entreotras opciones-la opción para reducir eltamañodel archivo XAP, a través del Cacheo deEnsamblados. Al compilar nuevamenteelproyecto deSilverlightnos podemos percatar dequeahora cada uno delos Ensamblados referenciados (indicados en la lista anteriormente) ha sidoempaquetado en un archivo ZIP demanera individual, y cada unoha sido copiado al fólder ClientBin, al lado del archivo XAPde la Aplicación.
  • 17. Además, si abrimos nuevamenteel archivo XAPveremos quelos Ensamblados ya no sonincluidos como parte del XAP… …que el tamaño del archivo seha reducido dramáticamente… …y que el Manifiestode la Aplicación ha sido modificadopara indicar queahora esos Ensamblados son externos. Esto queda expresado a través delelemento<Deployment.ExternalParts>como a continuación semuestra en la siguientecaja de texto:
  • 18. <Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" EntryPointAssembly="Fundamentos.Inicial" EntryPointType="Fundamentos.Inicial.App" RuntimeVersion="4.0.50826.0"> <Deployment.Parts> <AssemblyPartx:Name="Fundamentos.Inicial" Source="Fundamentos.Inicial.dll" /> </Deployment.Parts> <Deployment.ExternalParts> <ExtensionPart Source="System.ComponentModel.DataAnnotations.zip" /> <ExtensionPart Source="System.Windows.Controls.Data.zip" /> <ExtensionPart Source="System.Windows.Controls.Data.Input.zip" /> <ExtensionPart Source="System.Windows.Data.zip" /> </Deployment.ExternalParts> </Deployment> Ahora la Aplicaciónha sido configurada para quelos ensamblados externos sean descargados de manera individual y sean colocadosen el Cachedelnavegador peroúnicamentela primera vez,para queen ejecuciones subsecuentes de la Aplicación,los Ensamblados –sino han sido modificados-los cargue directamente delCachey no del Servidor. Esto asegurará queúnicamentesea descargadoel archivo XAP, que por elhechode haber reducidosu tamaño ahora la Aplicación cargará más rápido. Esta técnica para reducir eltamaño delos archivos XAP funciona tantopara los Ensamblados quepertenecen al SDK deSilverlight,los del Silverlight Toolkit einclusoen nuestros propios Ensamblados.Para hacer esto loúnico que necesitamos es crear un archivo XML de metadatos para cada uno deellos. Creación del Archivo de Mapeo Para quepodamos Cachear Ensamblados propios, necesitamos crear unarchivo con el mismo nombrequeelEnsamblado encuestión pero con extensiónextmap.xml.Por ejemplo, sinuestro Ensamblado sellamaseUtilerias.dll,elarchivo deMapeodeberá llamarse Utilerias.extmap.xml y deberá estarallado delarchivo .dlloriginal. El contenido del archivo deMapeo será elsiguiente: <?xml version="1.0"?><manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <assembly> <name>NOMBREDEL ENSAMBLADO</name> <version>VERSION DEL ENSAMBLADO</version> <publickeytoken>PUBLIC KEYTOKEN</publickeytoken> <relpath>RUTA DEL DLL</relpath> <extension downloadUri="NOMBREDEL ARCHIVO ZIP ADESCARGAR" /> </assembly> </manifest> Los elementos deberánempatar los valores del Ensambladoencuestión.Asimismo, debemos tomar en cuenta que el Ensamblado deberá estar firmado con una llavedeStrong Name usando la utilería sn.exeo directamenteusando elpanel depropiedades del proyecto del Ensamblado para crear la llavecriptográfica.
  • 19. Comprobación del Cacheo deEnsamblados Una manera sencilla para comprobarsielCacheo deEnsamblados está funcionandoo no es publicarla Aplicacióna unsitio Web público y accesibley utilizar alguna herramienta deinspección comoFiddler. En este casopublicaréla Aplicacióndeejemploen misitio rdiazconcha.coma través del copiado delos archivos vía FTP. Los archivos publicados serán la página .aspx y elfólder ClientBin. El URLfinal para esteejemplode comprobación será: http://rdiazconcha.com/Fundamentos/Fundamentos.InicialTestPage.aspx Si abrimos Fiddlerpara inspeccionar todoel tráficode HTTPy abrimos un navegadorquehaga una petición al URLindicado nos daremos cuenta queefectivamentela primera vez que ejecutamos la Aplicacióntodos los Ensamblados sondescargados posterior a la descarga delarchivo XAPprincipal, ya queno existenen el Cachedelnavegador aún. Si abrimos una nueva instancia delnavegador y volvemos a hacer una peticióna la misma página, nos daremos cuenta queni la Aplicación nilos Ensamblados ya noserán descargados, sino tomados delCachedel navegador. Ahora bien,sihacemos algún cambio enlos archivos ZIP delos Ensamblados –porejemploborrarlos de ClientBin y volvera recompilar toda la Solución para queseregenereny tenganuna nueva estampa detiempo-y publicamos los archivos nuevamenteveremos que efectivamente los archivos ZIPsondescargados nuevamente y no son tomados los del Cache. Para este ejemplovolvía publicar únicamente el archivo System.Windows.Data.zip enmi sitiocon una nueva estampa detiempo. Al volver a hacer la petición dela página elresultado que arroja Fiddlerserá elsiguiente: De esta manera podemos comprobar que únicamente sedescargan los archivos quehayan sido actualizados, el resto serán adquiridos a través delCache delnavegador encuestión.
  • 20. Fundamentosde Silverlight–Parte9 Clase UserControl Enfoquémonos ahora en MainPage.xaml por tratarsedeun archivo desuma importancia ya quees ahí dondeexpresamos la Interface de Usuario para nuestra Aplicación. Si abrimos estearchivoen VisualStudiopodremos observarquesucódigo comienza con la declaración deun elemento detipo <UserControl>. Es en este elemento en dondeseindica cuáles la clasedecódigo relacionada para este código XAMLen específico, además de importarlos espacios de nombres requeridos por el intérpretede XAML(el único espacio de nombres requeridopor el intérpretede XAMLes el indicado con la línea xmlns=”…”): <UserControl x:Class="Fundamentos.Inicial.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300"d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"> … La clase decódigorelacionada (Fundamentos.Inicial.MainPage) es en dondeescribiremos la funcionalidadquenecesitela aplicación, por ejemplo,los manejadores deeventos para los controles, etc. La claseUserControl hereda indirectamentedela claseUIElementque analizaremos a continuación. Los espacios denombres (namespaces) mostrados enelcódigo anterior son necesarios cuando requerimos traer a nuestro ámbito las clases y elementos queestos contienen.Estoes también ciertosideseas declararinstancias detus propios objetos a través de XAML. Esto es análogoa la cláusula using enellenguaje deprogramaciónC#o la cláusula Imports enVisualBasic .NET. Los alias queutilizanlos espacios denombres son totalmentearbitrarios y solamenteseutilizan para mejor legibilidad del código.
  • 21. Fundamentosde Silverlight–Parte10 Clase UIElement La clase UIElement es la clasebasepara todos los elementos visuales en Silverlight. En esta clasees en donde se definenla gran mayoría de los eventos de interaccióncon el usuario(eventos delmouse, teclado, enfoque,etc.). Algunos delos eventos incluidos en esta claseson:  MouseLeftButtonDown  MouseLeftButtonUp  MouseRightButtonDown  MouseRightButtonUp  MouseEnter  MouseLeave  Drop EventosRuteados La mayoría de los eventos anteriores queexpone la clase UIElement son ruteados, esto es, soneventos quevan escalando desdelo más profundo delárbolde objetos deXAML hacia arriba (a este término se ledenomina bubblingen inglés). En los argumentos deeste tipo de eventos podremos encontrar la propiedad Handled, la cualindica sielevento sigueescalando o no.Debido a la naturaleza que tienen los eventos ruteados podríamos crear manejadores de eventos globales para diversos elementos visuales.
  • 22. Fundamentosde Silverlight–Parte11 Manejo de Eventos En Silverlight tenemos tres maneras diferentes para poder manejar eventos.  Desde XAML  A través de código usando la sintaxis estándar  A través de código usando Expresiones Lambda Manejo de eventosusando XAML Podemos manejar los eventos de los elementos usando XAML. La siguientecaja detextodemuestra el manejo del eventoClick del control Button: … <Button Click="Button_Click" /> … …y su código relacionadousandoel lenguajeC#: private void Button_Click(objectsender,RoutedEventArgs e) { //Manejo delevento } Manejo de eventosusando lasintaxisdellenguaje Como cualquierotroevento enC#, podemos usar eloperador sobrecargado +=para asignarelmétodoquedeseamos queseejecute cuando elevento sea disparado. La siguientecaja detexto demuestra la asignación delmétodo button1_Click al eventoClick deun botón: this.button1.Click += new RoutedEventHandler(button1_Click); private void button1_Click(object sender,RoutedEventArgs e) { //Manejo delevento } Manejo de eventosusando ExpresionesLambda Las expresiones lambda son funciones anónimas quepodemos utilizar para creardelegados. El siguientecódigo muestra el uso deuna ExpresiónLambda como manejadordelevento Click de unbotón. //s es object y a es RoutedEventArgs this.button1.Click += (s, a) => { //Manejo delevento }; Una de las ventajas claras de utilizar una Expresión Lambda es que nos ahorraremos elcuerpodel método que está manejando el evento. Generalmenteenescenarios en dondenecesitemos crear contenidodinámico es de gran utilidad contar con esta posibilidad.
  • 23. Application Class Silverlight Encapsulates a Silverlightapplication. Inheritance Hierarchy System.Object System.Windows.Application Namespace: System.Windows Assembly: System.Windows (in System.Windows.dll) Syntax C# VB Copiar public class Application XAML Object Element Usage Copiar <Application.../> The Application typeexposes thefollowing members. Constructors Name Description Application Initializes a new instance ofthe Application class. Top Properties Name Description ApplicationLifetimeObjects Gets the applicationextension services that havebeen registeredfor this application. Current Gets the Application objectfor thecurrent application.
  • 24. HasElevatedPermissions Gets a valuethatindicates whether the applicationis running with elevated permissions. Host Gets various details about the Silverlight application's host. InstallState Gets the currentout-of-browser installationstateofthe application. IsRunningOutOfBrowser Gets a valuethatindicates whether the applicationwas launched fromtheout-of- browser state. MainWindow Gets the out-of-browser application window. Resources Gets a collection ofapplication-scoped resources, suchas styles, templates,and brushes. RootVisual Gets or sets themainapplication UI. Windows Gets a collection ofthe Window instances thathavebeen created. Top Methods Name Description CheckAndDownloadUpdateAsync Launches an asynchronous process tocheck for anddownload an updatedversion ofthe application. Equals(Object) Determines whether the specified Object is equalto the currentObject. (Inheritedfrom Object.) Finalize Allows an objectto tryto freeresources andperformother cleanup operations beforethe Object is reclaimedby garbage collection. (Inheritedfrom Object.) GetHashCode Serves as a hashfunction for a particular type.(Inherited fromObject.) GetResourceStream(Uri) Returns a resource file froma location intheapplication package. GetResourceStream(StreamResourceInfo, Uri) Returns a resource file froma location inthespecifiedzip package. GetType Gets the Typeofthecurrent instance. (Inherited fromObject.)
  • 25. Install Attempts toinstalltheapplication so thatit canrun outside the browser. LoadComponent Loads a XAML filethatis located atthespecifiedUniform Resource Identifier (URI) and converts itto an instance oftheobjectthat is specified by therootelement oftheXAML file. MemberwiseClone Creates a shallow copy ofthecurrent Object.(Inherited fromObject.) ToString Returns a string that represents thecurrent object. (Inherited from Object.) Top Events Name Description CheckAndDownloadUpdateCompleted Occurs whentheapplication has finished checking for updates in responseto a CheckAndDownloadUpdateAsync methodcall. Exit Occurs just beforeanapplication shuts downand cannotbe canceled. InstallStateChanged Occurs whenthe InstallStatepropertyvaluechanges. Startup Occurs whenanapplication is started. UnhandledException Occurs whenanexceptionthat is raisedby Silverlightis not handled. Top Remarks Application is a class thatencapsulates a Silverlight application andprovides thefollowing services:  ApplicationEntry Point  ApplicationLifetime  ApplicationManagement  Application-Scoped Resources  Unhandled Exception Detection The entry point ina Silverlight application is theclass in your applicationassembly thatderives from Application.This class is known as the application class. When theSilverlight plug-instarts, Silverlight uses metadata in theapplication packageto instantiatethe application class. At this point, theapplication's lifetime starts. The lifetimeofan applicationoccurs inthefollowing order:  Construction (Application)
  • 26.  Initialization(Startup)  Application Running  ...  Application Shutting Down(initiated by user)  Exit (Exit) By handling the Startup event, you can retrieveandprocess initializationparameters fromthe InitParams property ofthe StartupEventArgs objectthat is passed to the Startup eventhandler. Initializationparameters are configured by using the initParams property of theHTML objectelement that is usedto configureand instantiatetheSilverlight plug-in. During startup,you can alsospecify the main applicationUI to showby setting theRootVisualproperty. Once an applicationis running, the Application objectandits statecan beaccessed from the static Current property. Thesingleton pattern ensures thatstatemanaged by Application, including sharedresources (Resources) and customproperties,is availablefrom a single, application-scopedlocation. XAML Usage Notesfor the Application class In practical XAMLusage, Application is almost always therootelement oftheApp.xamlfileand therefore a practical usagewould include theclient andXAML xmlns values,as wellas anx:Class valuefor thecode-behindthatinitiates the rootvisual, as shown inthe following XAML fragment. Copiar <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="namespace.class"...> ... </Application> Technically theXAML usagefor any member ofthe Application class thatsupports XAMLapplies bothto the Application class andalso to any Applicationsubclass that does notspecifically disable XAMLusageby shadowing members or changing theaccess level ofits constructors. However,theXAML usage for Application members shows the literal Applicationrather thantheplaceholder application because subclassing Application is notnecessaryfor most Silverlight applicationmodelscenarios, and the XAML usageshows the most common usagepatterns whenever possible. Examples The following codeexampledemonstrates howto use this class tomerge theXAML and code-behind portions ofa Pageclass.This code is similar to the InitializeComponent methodthatVisual Studio generates for thesamepurpose. Visual Studio generates the InitializeComponent methodwhen a XAML filehas a build actionof Page. To loada XAML file using the following examplecode, set its build actionto Resource. C# VB Copiar
  • 27. private System.Windows.Controls.Grid LayoutRoot; public Page() { System.Windows.Application.LoadComponent(this, newSystem.Uri( "/SilverlightApplication1;component/Page.xaml", System.UriKind.Relative)); this.LayoutRoot =((System.Windows.Controls.Grid) (this.FindName("LayoutRoot"))); } Version Information Silverlight Supported in: 5,4, 3 Silverlight for WindowsPhone Supported in: Windows PhoneOS 7.1, Windows PhoneOS 7.0 Platforms For a list of theoperating systems andbrowsers that are supported by Silverlight, see Supported Operating Systems andBrowsers. Thread Safety Any public static (Sharedin VisualBasic) members ofthis type arethreadsafe.Any instancemembers arenot guaranteed to bethread safe. See Also Reference System.Windows Namespace Other Resources
  • 28. ApplicationModel Adding Silverlight toa Web Pageby Using HTML or JavaScript
  • 29. Silverlight 4 Beta –SoporteparaArrastrar y Soltar en Mac OS X En el artículoanterior vimos queuna delas características nuevas deSilverlight4 es su capacidad derecibir archivos queseestén arrastrando desde afuera dela aplicación. No obstante,en Mac OS X es diferente el mecanismopara lograr esta funcionalidad ya que en ese sistema operativo, una acción dearrastrary soltar nole avisa al APIde Silverlight delo ocurrido, a diferencia delo que sucede en Windows.En esteartículo veremos la alternativa para implementaresta característica en Mac OS X. Cabemencionar que este mecanismo funcionará enSafari, mientras que en FireFox sea probablequeno debido a la diferencia dearquitectura de este último en el sistema operativo deApple. El proyecto Usaremos el proyecto anterior. Modificaciones Para implementar la funcionalidadde Arrastrar y Soltaren Mac OS X necesitaremos hacerlo a través de funciones de Javascript quele avisenalplugin que una acción dearrastrar-soltar ha sucedido.Las funciones deJavascriptdeberán manejaralguno delos siguientes eventos delelemento<OBJECT>o <EMBED>(según lo que hayamos usadopara instanciar Silverlight, ennuestrocasohemos usado <OBJECT>)  ondragenter  ondragleave  ondragover  ondrop Según la documentación deWeb Kit,de los eventos anteriores debemos comomínimo manejar ondragover, y dentro deél ejecutar preventDefault() en el objeto deevento. Sino hacemos estono recibiremos ninguno delos cuatroeventos anteriores. Cabemencionar que esto noestá explicado en elSDKde Silverlight 4 Beta pero probablementeesto sea aclaradoen sus futuras versiones. Aclaradolo anterior, realizaremos las siguientes modificaciones alelemento <OBJECT>con el que estamos instanciando Silverlight: <object id="sl"data="data:application/x-silverlight-2," type="application/x-silverlight-2"width="100%" height="100%" ondragover="ManejaDragOver(event)" ondrop="ManejaDrop(event)"> // los parámetros quedan igual </object> Como podemos observar, las modificaciones son: - Estamos agregando el atributoid, el cual nos permitirá invocar desdescript al elemento. - Estamos manejando ondragover a través dela función ManejaDragOver. Asimismo a la función leestamos pasando elobjeto event el cual tieneinformacióndelevento. - Estamos manejando ondrop a través dela función ManejaDrop. Asimismoa la función leestamos pasando elobjeto event el cual tiene informacióndel evento. Ahora bien,debemos implementarlas funciones reciénexplicadas. Esto lo haremos en elbloque de<script>queya tenemos presente en la página: //El manejo deondragover y la ejecución depreventDefault() //son requeridos segúnla documentaciónde WebKitlocalizada en: //http://tuvix.apple.com/mac/library/documentation/AppleApplications/Conceptual/SafariJSProgTopics/Tasks/DragAndDrop.html function ManejaDragOver(oEvent) { oEvent.preventDefault(); } function ManejaDrop(evento) {
  • 30. // Previene las acciones por defaulten el DOM evento.preventDefault(); // Obtiene el objetode Silverlight var sl =document.getElementById("sl"); // Delega el eventoa Silverlight var manejado =sl.dragDrop(evento); // Si ha sidomanejado, evita la propagación del eventoen elDOM if(manejado) evento.stopPropagation(); } ondragover La función ManejaDragOver únicamentehaceuna llamada a preventDefault() sobreel objetode evento. Esto para permitir que el resto de eventos puedan serrecibidos (ver enla partedearriba la liga a la documentaciónde WebKit). ondrop La función ManejaDrop tambiénhaceuna llamada a preventDefault() para evitar las quelas acciones pordefault sucedan enel DOM (ya que nosotros queremos hacer nuestro propio manejo). Posteriormenteobtieneelobjeto deSilverlight y ejecuta sufunción dragDrop() pasando comoparámetroelobjeto deevento. Finalmentevalidamos quesielevento ha sidomanejado, evitela propagación del eventoen el DOM. Resultado Como podemos apreciaren las siguientes figuras,alarrastrar unarchivo desdeafuera de la aplicación Silverlight enMacOS X, y después soltarlo elarchivoseagregará al ListBox y comenzará su reproducción automáticamente,justocomo enel artículo anterior.
  • 31. Resumen Para implementar la funcionalidadde Arrastrar y Soltaren Mac OS X debemos hacerloa través descript enelDOMdebidoa las diferencias en la arquitectura delas plataformas; no obstante es pefectamenteposible.En esteartículo detallamos los pasos necesarios para hacerlo. Esto nos permitirá ofrecer a nuestros usuarios una experiencia estándar enelusode los aplicativos Silverlight que construímos. Puedes descargarelcódigo aquí. Puedes ver eldemoen vivo aquí. Requiereelruntime Silverlight 4,AppleMacOS X y Safari.