Mc silverlight2 dia1
description
Transcript of Mc silverlight2 dia1
Silverlight 2.0 para desarrolladores(Día 1)
Marino PosadasMVP C#, MCAD, MCSD, MCT
Alhambra-Eidos
Primero publicado en castellanoVersión final (RTW)Gratuito con el número de noviembre de dotNetManiaAccesible desde la Web de la revista (www.dotnetmania.com) Está siendo entregado en los eventos de desarrollo de Microsoft.
Fundamentos: “Programación en Silverlight 2.0” de Netalia Ediciones
Microsoft Silverlight es un componente multiplataforma, y multinavegador que permite la programación en .NET de la siguiente generation de aplicaciones para internet: (rich interactive applications ó R.I.A.)
ÍndiceArquitectura y buenas prácticas
Modelos de arquitectura y escenarios para el desarrollo con Silverlight. Implicaciones del modelo de seguridad en sandbox y el PAL (Platform Adaptation Layer).
Visual Studio 2008 y Expression Blend 2El papel de Visual Studio 2008 en el desarrollo con Silverlight 2.
Arquitecturas de navegación. Clases, Interfaces y soporte arquitectónico. Gestión de estado de la aplicación (Almacenamiento Aislado). Eventos. Manejo de hebras de ejecución y el componente BackgroundWorker. Gestión de recursos.
Indice3. Expression Blend y la interfaz de usuario
Recomendaciones para el diseño. Controles del SDK y aportaciones del Silverlight Toolkit de Marzo 2009. Estilos, Plantillas y recursos de diseño. Visual State Manager. Enlace con objetos de lógica de negocio.
Comunicaciones fuera del sandboxInteracción con HTML /DOM y el navegador. Cajas de Diálogo del sistema y acceso a recursos locales. Acceso a Servicios: ASMX (SOAP), WCF para Silverlight y REst. Acceso a datos con ADO.NET Data Services.
Buenas prácticas e instalación de aplicacionesEl decálogo de las buenas prácticas en aplicaciones Silverlight. El proceso de instalación, desde el punto del cliente y del servidor. Introducción a los modelos de programación complejos: PRISM 2.0.
Modelos de arquitectura y escenarios para el desarrollo con Silverlight
Experiencia Usuario Continua
Ubicuidad Riqueza Próxima Generación
SharePoint ASP.NET+AJAX Gadgets Silverlight Infopath OBA Winforms WPF XNA
Arquitectura Silverlight
Leyenda
V2.0
Leyenda
V1.0
CLR Execution Engine
Framework
HTML DOMIntegration
XAML
Networking
JSON
REST POX
RSS
Data
LIN QXLINQ
DLR
RubyPython
WPFExtensible
Controls
BCLGenerics
Collections
InputsKeyboard
Mouse Ink
Media
VC1 WMA MP3
Browser Host
IntegratedNetworking
Stack
Installer
ApplicationServices
MS AJAXLibrary
UI Core
Vector TextAnimation
Images
DRM
Media
Controls
Layout Editing
Historia Microsoft de Arquitectura N-TierEn Microsoft, las arquitecturas N-Tier comenzaron con Windows NT 4.0 Option Pack, (Epoca1998 aprox.) -Componentes MTS (Microsoft Transaction Server) C++/VB-DCOM (Distributed COM)-Windows DNA(EpocaWindows 2000)-ComponentesCOM+, C++/VB, etc.
¡Este diagrama es valido hoy! (2009)
1998Arquitectura 3-Tier
Arquitectura N-Tier / .NET 2.0/3.x(2005-2009)
Capa de PresentaciónWPF, XBAP, WinFormsASP.NET, AJAX, ASP.NET MVCSilverlight
Capa de NegocioAssemblies(.NET components)WCF Services / WS .asmxSystem.TransactionsArquitecturas personalizadas
Capa de DatosMicrosoft SQL ServerOtros SGBD (Oracle, DB2, etc.)
Arquitectura de Silverlight 2.0
Arquitectura de SilverlightAplicaciones RIAOtras plataformas RIA
Adobe Flash Player, Adobe Flex, Adobe AIRPlataformas AJAXJavaFXGoogle Gears
Silverlight y los lenguajesXAML, .NET, Lenguajes dinámicos: IronRuby, IronPyton
XAML: Expression Blend y Visual Studio 2008Para el resto: Visual Studio 2008 (Blend no dispone de editor .NET)
Implicaciones del modelo de seguridad en sandbox y el PAL
(Platform Adaptation Layer)
La Sandbox (Caja de arena)Toda aplicación Silverlight se ejecuta en una de ellas
Conceptualmente similar a la de HTML DOM
Ejecución similar a las páginas HTML –click en una URLNo hay permisos de ejecución Pero no hay forma de salir de la sandbox
Incluye funcionalidad adicional:Almacenamiento OfflineControles para upload de ficherosSoporte “Cross domain“ (requiere un fichero CrossDomain.xml en el servidor de destino)
El Runtime (CoreCLR)Está basado en el PAL (Platform Adaptation Layer)
Introduce por primera vez en .NET la ejecución “side-by-side”
Mapea las API’s del sistema en llamadas disponibles desde Silverlight
Implementa un sistema de seguridad propio, no basado en el CAS sino en Transparencia de Seguridad (Security Transparency)
El modelo divide el código en 3 clases:
Transparente (Transparent),
Crítico con seguridad (SafeCritical), y
Crítico (CriticalCode).
El Runtime (CoreCLR) y las llamadas
Instalaciones especialesPreviamente, necesitamos las herramientas como dos ficheros separados:
1) Instalador “Silverlight Tools for Visual Studio 2008 SP1”, disponible en la dirección: http://go.microsoft.com/fwlink/?LinkId=129043
2) Silverlight 2.0 Developer Runtime desde la dirección http://go.microsoft.com/fwlink/?linkid=129011
Dos opciones de instalación son:a) Extraer y pegar.
1. Abrir una ventana de comandos (cmd.exe) y navegar a donde esté el fichero Siverlight_tools.exe.2. Ejecutar el comando silverlight_tools.exe /x.3. Una vez descomprimidos los ficheros, volcar en el mismo directorio el Silverlight 2.0 Developer Runtime y ejecutar SPInstaller.exe.
b) Colocar el Silverlight 2.0 Developer Runtime en el directorio Temp (no requieredescompresión de ficheros).1. Navegar al directorio Temp (o abrir una ventana de comandos y teclear
la secuencia: CD %Temp%.2. Crear desde ahí un directorio para la instalación.3. Copiar Silverlight.2.0_Developer.exe a ese directorio y ejecutar el instalador Silverlight_tools.exe.
Visual Studio 2008 y Expression Blend 2
Modelos de arquitectura y escenarios para el desarrollo con Silverlight. 3 Modelos básicos:
“Islas” Silverlight (similares a Flash)Componentes individuales que pueden coexistir en la misma página
Aplicaciones de tipo medio con toda la interfaz en Silverlight/XAMLAplicaciones de tamaño superior que requieren una arquitectura más sofisticada: PRISM 2.0
Visual Studio 2008 y Expression Blend 2
“Islas” Silverlight (similares a Flash)El entregable resultante (fichero XAP) debe estar programado de tal forma que su funcionamiento sea “Loosely Coupled”
Aunque no siempre es posible del todoEl tratamiento de errores para estos casos especiales se convierte en exhaustivo.Los problemas pueden venir de dependencias del DOM, de acceso a servicios no disponibles, de accesos “crossdomain”, de insuficiencia de permisos en acceso a información local de la máquina, etc.
En producción, si nuestro servidor no permite la adición del tipo MIME .XAP, la solución es renombrarlo a .ZIP (formato reconocible por todos los servidores)
Visual Studio 2008 y Expression Blend 2Aplicaciones de tipo medio
Toda la interfaz es puro SilverlightLa parte ASP.NET/HTML actúa meramente como contenedor de las páginas SilverlightRequiere la codificación de un sistema de navegación propio
Pueden considerarse técnicas más avanzadas a este propósito, como la IoC (Inversion of Control)De la misma forma en este modelo y el siguiente recomiendan a veces técnicas de inyección de dependencias (Dependency Injection)
Aplicaciones grandesPRISM 2.0 es el modelo “Patterns & Practices” construido a tal efectoComentaremos algo más sobre este modelo al final del master
Estructura de una “isla” Silverlight
Idóneo para todo lo que suponga programación de la funcionalidad del/los controles
Dispone de Intellisense (Expression Blend, no)No dispone de un diseñador visual pero sí de un “intérprete
visual” de la IUProgramación del modelo de eventosCreación de clases personalizadasSistema de depuración (incluyendo hebras individuales en
2008)Extensión de la arquitecturaOpciones de compilación / distribución configurables
El papel de Visual Studio 2008 y Blend 2 en el desarrollo con Silverlight 2.0
Requiere de una instalación cuidadosa VS2008 SP1 Blend 2.0 SP1 Visual Studio Tools for Silverlight
Incluye el runtime de tiempo de ejecución Se actualiza automáticamente a la última versión disponible
Permite la programación sincronizada La parte de C#/VB. NET en VS2008 La parte XAML, en Blend 2.0 Los cambios en uno de ellos, se reflejan en el otro
El papel de Visual Studio 2008 y Blend 2 en el desarrollo con Silverlight 2.0
Arquitecturas de navegación
Lógica o por página En el fichero ASPX/HTML, dentro de un
elemento <div> UserControl ≈ View ó Page Página contenedora + Grid (root), hace las veces de un gestor de navegación que añade/elimina UserControls (páginas) al Grid
Navegación lógica: Gestores de navegación
Visual Studio 2008 y Expression Blend 2Navegación (si es aplicable)
25
Visual Studio 2008 y Expression Blend 2Distribución:
Componentización
private void Application_Startup(object sender, StartupEventArgs e){string startPageParameter = "PaginaInicial"; if (!e.InitParams.ContainsKey(startPageParameter)) { this.RootVisual = new PaginaInicial(); } else { switch (e.InitParams[startPageParameter]) { case "PaginaInicial": this.RootVisual = new PaginaInicial(); break; case "OtraPaginaInicial": this.RootVisual = new OtraPaginaInicial(); break; default: throw new Exception(
“Debe comenzarse por 'PaginaInicial' o ‘OtraPaginaInicial’.");} } }
Ejemplo de Navegación gestionada por parámetros iniciales
28
Sobre clases, interfaces y soporte
Sobre clases, interfaces y soporte
Además de los elementos clásicos de desarrollo hay aspectos especiales a tener en cuenta debido al modelo de alojamiento en host HTML que usa SL.Por un lado: no hay problema en heredar de cualquier clase de la jeraquía disponible en el CoreCLR
Pero debemos de tener en cuenta que no se trata de un modelo clásicoPodemos crear elementos “híbridos”, que dispongan de aspectos de la interfaz de usuario con un comportamiento de lógica de negocio
Heredando directamente de elementos de la IU como UIElement o FrameworkElement.Podemos crear elementos de animación como clases separadas que se apliquen posteriormente a elementos de la IU
Sobre clases, interfaces y soporteSi queremos utilizar propiedades de nuestras clases en XAML, debemos definirlas como DependencyProperties
Se establece así una correspondencia entre elementos propios del CLR y otros de XAMLLa sintaxis de una declaración de este tipo es como sigue:
private static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string),
typeof(CajaTextoDNI), null);
// el parámetro null puede ser un valor predeterminado o un callback public string Text { get { return (string)GetValue(TextProperty); } set { SetValue(TextProperty, value); } }
Sobre clases, interfaces y soporte
Otra alternativa es la implementación del rico conjunto de interfaces disponibleSiempre permite definir una interfaz visual que será totalmente distinta tanto en funcionalidad como en aspecto
Manteniendo los elementos básicos (de donde heredemos). En Windows Forms, era complejo y los resultados, dudosos en calidad de la IU.
Sobre clases, interfaces y soporte
La integración con HTML permite soluciones híbridas que aprovechen lo mejor de ambos mundos y que utilicen tecnologías actuales como ASP.NET AJAX.En ocasiones, la mejor solución a un problema pasa por una acción de este tipo
Como por ejemplo, el control del tamaño del componente en función del tamaño del navegador.Hay que tener en cuenta que aunque el nivel de cumplimiento de los estándares por parte de los navegadores se ha incrementado mucho, todavía hay ciertas formas distintas de dar solución al mismo problema. El soporte de navegadores es múltiple de verdad:
Windows: IE, Firefox, Safari, Opera, ChromeMac: Konqueror, Firefox, SafariLinux: Varios (a través del proyecto MoonLight)
Para estar seguro, no fiarse, probar la misma página en cada uno de ellos.
Sobre clases, interfaces y soporte:Interacción HTML
Ejemplo básico de esta interacción: Capturar el tamaño del navegador cuando cambie.Vincular un manejador del evento resized para el objeto App.Current.Host.Content.
Page.xaml.cs:public Page(){
InitializeComponent(); App.Current.Host.Content.Resized += new
EventHandler(Content_Resized);}
Captura el tamañovoid Content_Resized(object sender, EventArgs e) {
double height = App.Current.Host.Content.ActualHeight; double width = App.Current.Host.Content.ActualWidth;
}
Gestión de estado(Almacenamiento Aislado)
Gestión de estado: Almacenamiento Aislado (Isolated Storage)
Silverlight usa Isolated Storage como sistema virtual de ficheros para almacenar datos en una carpeta oculta en la máquina cliente. Separa los datos en dos secciones:
Sección #1 contiene información administrativa, como la cuota de disco Sección #2 contiene los datos en sí. Cada aplicación Silverlight recibe su parte de almacenamiento correspondiente que, por defecto, es de 1 MB por aplicación.
Gestión de estado: Almacenamiento Aislado
Ventajas:Buena alternativa al uso de cookies especialmente si se trabaja con conjuntos grandes de datos.
Casos típicos incluyen la funcionalidad “undo”, elementos del carrito de la compra, configuración del sistema y/o preferencias de usuario.
Isolated storage se almacena por usuario individualCon permisos suficientes, los clientes pueden solicitar el incremento de la cuota mediante código
Gestión de estado: Almacenamiento Aislado
Posibles inconvenientes:Los administradores tienen control sobre la cuota, por lo que pódría producirse un error de acceso, y se precisa el control de errores. Con algo de esfuerzo se pueden encontrar los datos y borrar su contenido. Para prevenir cambios, podríamos utilizar las clases de criptografía. El codigo debe tener el permiso IsolatedStorageFilePermission para almacenar con Isolated Storage.
Gestión de estado: Almacenamiento AisladoPara usarlo, añadimos una referencia using al namespace System.IO.IsolatedStorage, y otra a System.IO.
using System.IO.IsolatedStorage;using System.IO; …private void SaveData(string data, string fileName) { using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) { using (IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(fileName,
FileMode.Create, isf)) { using (StreamWriter sw = new StreamWriter(isfs)) { sw.Write(data); sw.Close(); } } } }
Gestión de estado (almacenamiento aislado) private string LoadData(string fileName) { string data = String.Empty; using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) { using (IsolatedStorageFileStream isfs = new
IsolatedStorageFileStream(fileName, FileMode.Open, isf))
{ using (StreamReader sr = new StreamReader(isfs)) { string lineOfData = String.Empty; while ((lineOfData = sr.ReadLine()) != null) data += lineOfData; } } } return data; }
Gestión de estado: Almacenamiento Aislado
Solicitud de incremento de cuotaDebe de usarse IsolatedStorageFile.TryIncreaseQuotaTo()
void OnMouseLeftButtonDown(…) { using (IsolatedStorageFile store =
IsolatedStorageFile.GetUserStoreForApplication()) {
if (store.TryIncreaseQuotaTo(2 * 1024 * 1024)) { // El usuario acepta.
} else {
// El usuario rechaza -> hay que manejarlo. } }
}
Eventos
x:Name Se debe dar nombre a los elementos XAML que se
quieran usar en el códigoPara el acceso a estilos se utiliza el identificador x:KeyVisual Studio declara automáticamente campos para todos los elementos con atributos x:Name
XAML: <TextBlock x:Name=“Mensaje”/>
public void Page_Loaded(sender, MouseEventArgs e) { Mensaje.Text = “¡Hola Mundo!”;}
Evento Page_Loaded
Primera oportunidad para ejecutar código tras la descarga del plug-in de Silverlight y la carga en el navegadorSe dispara después de que todos los elementos XAML han sido descargados y se ha creado el árbol de elementos
Si busca ejecutar código inmediatamente, considere cargar el contenido programáticamente en segundo plano
Eventos de UIElement (Base)
MouseMoveMouseEnterMouseLeaveMouseLeftButtonDownMouseLeftButtonUp
KeyUpKeyUp KeyDownKeyDown GotFocusGotFocus LostFocusLostFocus LoadedLoaded
Todas las formas y controles heredan de UIElement, lo que significa que todos los elementos tienen al menos 10 eventos.
Conectándose a los Eventos
Los manejadores de eventos pueden especificarse en forma declarativa en el XAML:
O explícitamente en el archivo de code-behindProgramáticamente por medio del manejador de evento Page_Loaded
<Rectangle x:Name=“MyRect” MouseEnter=“MyRect_MouseEnter"> </Rectangle>
<Rectangle x:Name=“MyRect” MouseEnter=“MyRect_MouseEnter"> </Rectangle>public void MyRect_MouseEnter(object sender, MouseEventArgs e) { // TODO: añadir código}
public void MyRect_MouseEnter(object sender, MouseEventArgs e) { // TODO: añadir código}
Eventos (Trucos)
Capturar el evento Mouse Wheel Silverlight no lo soporta , pero podemos capturar el evento mediante el objeto HtmlPage. Veamos cómo funciona par a IE, Opera, Mozilla y Safari.Declaramos 3 eventos para capturar todas las posibilidades del los navegadores
Por ejemplo, el evento DOMMouseScroll lo usa Mozilla.public Page() {
InitializeComponent(); HtmlPage.Window.AttachEvent("DOMMouseScroll", OnMouseWheel);
HtmlPage.Window.AttachEvent("onmousewheel", OnMouseWheel); HtmlPage.Document.AttachEvent("onmousewheel", OnMouseWheel);}Nuestro evento controla el “delta change” en la rueda del ratón. La forma de hacerlo en Mozilla y Safari es diferente a IE u Opera.
Eventos (Trucos)Mozilla/Safari: Comprobar la propiedad llamada “detail” IE/Opera: Comprobar la propiedad llamada “wheeldelta” Código completo:
private void OnMouseWheel (object sender, HtmlEventArgs args) { double mouseDelta = 0; ScriptObject e = args.EventObject; // Mozilla and Safari if (e.GetProperty("detail") != null) { mouseDelta = ((double)e.GetProperty("detail")); } // IE and Opera else if (e.GetProperty("wheelDelta") != null) mouseDelta = ((double)e.GetProperty("wheelDelta")); mouseDelta = Math.Sign(mouseDelta);
}
Manejo de hebras de ejecución y el componente BackgroundWorker
Manejo de hebras de ejecución y la primitiva BackgroundWorker
CaracterísticasUna aplicación Silverlight actualiza la interfaz de usuario desde la hebra principal de ejecución (Dispatcher)
Puede provocar situaciones intolerables cuando se están procesando grupos de ficheros localesP.E.: creando bitmaps a partir de ficheros gráficos del equipo del usuario que van a ser presentados en pantallaEn estos casos, debiéramos dejar la responsabilidad de la creación del Bitmap a un método que sea llamado cada vez que se produzca el evento CompositionTarget.Rendering:
CompositionTarget.Rendering += new EventHandler(CrearBitmap)
Manejo de hebras de ejecución y la primitiva BackgroundWorker
Hebras de ejecuciónAsí, cada vez que un nuevo elemento (Bitmap, u otro), este construido y listo para ser mostrado, el motor de interpretación visual (rendering) actualizará la IU evitando esos lapsus por falta de respuestaPara actualizar la IU se debiera usar la hebra de IU principal.Por ejemplo, el siguiente código no funciona:... Timer t = new Timer( GetData, null, TimeSpan.Zero, new TimeSpan( 0, 1, 0 ) ); ... public void GetData( object stateInfo ) { SampleWebServiceSoapClient client = new SampleWebServiceSoapClient(); client.HelloWorldCompleted += new EventHandler<HelloWorldCompletedEventArgs>(
client_HelloWorldCompleted ); client.HelloWorldAsync(); }
private void client_HelloWorldCompleted( object sender, HelloWorldCompletedEventArgs e ) { // actualizar la IU}
Manejo de hebras de ejecución y la primitiva BackgroundWorker
Hebras de ejecuciónEl código anterior devolverá un error “Invalid cross-thread access“La razón es que se intenta acceder a la IU principal desde otra hebra, lo que podría tener problemas de seguridadLa solución es utilizar un objeto DispatcherTimer, en lugar de System.Threading.Timer que utiliza el ejemploEl problema es que la hebra principal (Dispatcher) no puede ser invocada desde un System.Threading.Timer
DispatcherTimer está precisamente pensado para eso
También es conveniente en ocasiones el uso del evento CompositionTarget.Rendering: veremos un ejemplo claro en el apartado de Cajas de Diálogo del sistema (FileOpen dialog)El código resultante de utilizar esta segunda aproximación sería el siguiente:
Manejo de hebras de ejecución y la primitiva BackgroundWorker
DispatcherTimerDispatcherTimer t = new DispatcherTimer();t.Interval = new TimeSpan( 0, 0, 1 ); t.Tick += new EventHandler( RefreshData ); t.Start();... private void RefreshData( object sender, EventArgs e) { SampleWebServiceSoapClient client = new SampleWebServiceSoapClient(); client.HelloWorldCompleted += new EventHandler
<HelloWorldCompletedEventArgs>(client_HelloWorldCompleted); client.HelloWorldAsync(); } private void client_HelloWorldCompleted( object sender,
HelloWorldCompletedEventArgs e ) { lastUpdated.Text = DateTime.Now.ToLongTimeString();
}
Recursos (externos e internos al control)
Recursos (externos e internos al control)
Recursos (externos e internos al control)
Resource (continuación)Problemas posibles: Uri’s no accesibles al ser generadas por código, etc.Solución: Uri’s relativas al ensamblado:
<Image Source=”/{assemblyShortName};component/Foto.jpg”/>
Podemos extraer un recurso programáticamente mediante:
Application.GetResourceStream(uri).StreamContent
Se añade al .XAP (no a la DLL), en el directorio raíz conceptual de la aplicaciónAccesible utilizando Uri’s relativas a la raíz de la aplicación, y por tanto, incluyendo la barra inicial:
<Image Source=”/Foto.jpg” />Es lo que tiene más sentido cuando un recurso es utilizado por más de un ensamblado de la aplicación
Recursos (externos e internos al control)
NoneNo se copia en el XAP, pero el valor de metadato CopyToOutputDirectory , garantizará que es copiado junto al XAP en el destino de la instalación.Accesibles mediante Uri’s relativas respecto a la raíz de la aplicación (con barra inicial, por tanto)
<Image Source=”/Foo.jpg” />Preferible si el recurso ocupa mucho espacioSi se trata de vídeo, podemos utilizar la técnica del “streaming adaptativo”, que es un complemento que se instala sobre el servidor IIS y permite realizar una descarga inteligente del recurso de vídeo, en función del ancho de banda y otros factores.
No marcados (externos al proyecto)Se recuperan mediante URI’s absolutas
58
Streaming Adaptativo
Streaming AdaptativoExtensión de IIS Media ServicesPermite streaming hacia clientes Silverlight sobre HTTPDetecta las condiciones del escenario de transferenciaRequiere la instalación de la extensión sobre IIS 7.0“Trocea” el contenido multimedia en función de los parámetros evaluadosExpression Encoder 2 Service Pack 1, permite definir distintos niveles de calidad personalizados para el contenido multimedia
Streaming Adaptativo
Streaming Adaptativo (S.A.)Más información en http://www.iis.net/extensions/SmoothStreamingSe puede ver una demo de esta característica en http://www.iis.net/media/experiencesmoothstreamingLa explicación detallada del funcionamiento del SDK está disponible en http://msdn.microsoft.com/es-es/library/bb851621(en-us).aspx En el sitio https://silverlight.live.com/ pueden alojarse gratuitamente hasta 10 Gb de contenido multimedia que ya se configura para su uso mediante S.A.
Expression Blend 2.0(hay que verlo)
Recomendaciones para el diseñoSencillo no significa elegante (o estético), pero casi…
Uniformidad en la selección del tema principal del sitio/aplicaciónPensar siempre si una metáfora visual puede explicar más fácilmente un proceso que una interfaz de usuario clásica
Si no, usar la versión clásica (actualizada, siempre mejora)Si la respuesta es positiva, adelante desde 0
Reutilizar lo existente es un viejo principio de la OOP También es aplicable aquí
No caer en la excesiva demostración de las capacidades de la herramienta aunque no venga a cuentoAprender a trabajar con diseñadores (comprender sus motivaciones y carencias… como ellos comprenden las nuestras)Además de Blend, el resto de productos de la Suite Expression ofrece grandes posibilidades
63
Controles del SDK y aportaciones del Silverlight Toolkit de Marzo 2009
65
Estilos, plantillas y recursos de diseño
Estilos, plantillas y recursos de diseño
En Blend, disponemos del concepto de “Sesión de dibujo”, vinculada a los elementos Geometry principalmenteCualquier elemento visual (predeterminado o creado por nosotros), puede ser modelado mediante el uso de estilos
Blend genera el código XAML automáticamente por nosotrosPodemos ejecutar el proyecto desde Blend, para lo cual se crea una página de pruebas automáticamente (F5).
Muchos elementos pueden convertirse en recursos generales de toda la aplicación o en controles
Brushes a partir de imágenes o vídeos
68
Visual State Manager
Visual State Manager.
Gestiona estados y grupos de estadoManeja adecuadamente el modelo “Parts-and-States”Permite crear estados visuales que se correspondan con distintos estados de la lógica de negocioSe accede a el programáticamente mediante el objeto VisualStateManagerPodemos pasar de un estado a otro mediante una simple llamada por código al método GoToState(“estado”)
71
Enlace con objetos de lógica de negocio
Vinculación de datos (Lógica de negocio)
Permite acceder a los componentes compilados (DLL’s) que representan los objetos de lógica de negocioPermite vincularnos directamente con ellosCapacita para una rápida creación de la interfaz de usuario de los elementos que esos objetos representan
74
Silverlight 2.0 para desarrolladores(Fin del Día 1º)