Your SlideShare is downloading. ×
Fundamentos de silverlight
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Fundamentos de silverlight

564
views

Published on

Published in: Education

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
564
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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>
  • 12. <AssemblyPartx:Name="Fundamentos.Inicial" Source="Fundamentos.Inicial.dll" /> </Deployment.Parts> </Deployment>
  • 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.

×