dominios y alojamiento web en hostalia

Novedades de Silverlight 5. Parte II

28 de July de 2011
Valoración del artículo:
Seguimos con la segunda parte sobres las novedades que nos llegan con la nueva versión 5 de Silverlight.

Enlace a datos

En Silverlight 5 dispondremos de plantillas de datos (Data Templates) implícitas, que nos permitirán asociar un plantilla de datos a un tipo de datos concreto; tendremos por fin entre nosotros a Ancestor RelativeSource, que a partir de una plantilla nos permitirá establecer un enlace a datos a una propiedad del elemento que lo contiene, algo muy necesario y vital para todo tipo de aplicaciones; dispondremos de extensiones de marcado (Markup Extensions) personalizables, lo que nos permitirá crear mediante código extensiones personalizadas para, por ejemplo, añadir localización; y, finalmente, podremos realizar enlace a datos en los setters de estilos.

Plantillas de datos implícitas

Silverlight 5 ofrece plantillas de datos implícitas, que nos permiten asociar una plantilla de datos a un tipo de datos; es decir, elegir cómo se presenta un tipo de datos concreto en base a éste. Como ejemplo, crearemos una colección de entidades de tipo IPersona, que implementaremos en dos clases diferentes, Geek y MVP. A continuación, enlazamos la colección para ser visualizada en el siguiente ListBox:

<ListBox HorizontalAlignment="Stretch"
Margin="10,10,10,10"
Name="listBox1"
VerticalAlignment="Stretch"
ItemsSource="{Binding ocPersonas}" />

Si ejecutamos ahora la aplicación sin asignar plantillas de datos a los tipos, lo que visualizaremos será la representación predeterminada de la clase, resultado de aplicar el método ToString(), como podemos ver en la figura 7.

Para generar una visualización adecuada, podemos crear dos plantillas de datos, una para el tipo Geek y otra para el tipo MVP. Básicamente, las plantillas de datos ahora tienen una nueva propiedad DataType, a la que se puede asociar el tipo de datos al que se debe aplicar. Agregando las dos plantillas que se muestran en el listado 8 y sin cambiar un ápice el código XAML del ListBox, obtendremos una presentación completamente diferente, como se puede observar en la figura 8.

Listado 8
<DataTemplate DataType="idc:Geek">
<StackPanel Orientation="Horizontal">
<TextBlock>[GEEK!] - Nombre:</TextBlock>
<TextBlock Text="{Binding Nombre}"></TextBlock>
<TextBlock Text=" | Especialidad: "></TextBlock>
<TextBlock Text="{Binding Especialidad}"></TextBlock>
</StackPanel>
</DataTemplate>
<DataTemplate DataType="idc:MVP">
<StackPanel Orientation="Horizontal" Background="Yellow">
<TextBlock>[MVP!!] - Nombre: </TextBlock>
<TextBlock Text="{Binding Nombre}"></TextBlock>
<TextBlock Text=" | Especialidad: "></TextBlock>
<TextBlock Text="{Binding Especialidad}"></TextBlock>
</StackPanel>
</DataTemplate>

Nota: En Silverlight 5 dispondremos de plantillas de datos implícitas, que nos permitirán asociar un plantilla de datos a un tipo de datos concreto.

Ancestor RelativeSource

Hasta ahora, la propiedad RelativeSource de los bindings solo permitía Self y TemplatedParent, pero al ampliarse con una nueva opción, Ancestor, nos acercamos bastante al modelo de enlace a datos de WPF, algo muy positivo. Un ejemplo de ello se puede ver en el listado 9.

Listado 8
<DataTemplate>
<TextBox Width="{Binding Width
RelativeSource={RelativeSource
AncestorType=Border,
AncestorLevel=5}}" />
</DataTemplate>

Extensiones de marcado

En cuanto a las extensiones de marcado, éstas fundamentalmente nos permiten ejecutar código durante la interpretación del código XAML, tanto para propiedades como para manejadores de eventos, lo que las hace ideales para mejorar arquitecturas MVVM. Con Silverlight 4 teníamos cinco tipos diferentes:
  • Binding
    Text="{Binding Path=FirstName,Mode=TwoWay}"
  • StaticResource
    Foreground="{StaticResource BlueSolidColor}"
  • TemplateBinding
    VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
  • NullExtension
    Background="{x:Null}"
  • RelativeSource DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}"
La implementación de nuevas extensiones de marcado es realmente directa y requiere una simple derivación de la clase System.Windows.Markup.MarkupExtension: sobreescribir el método ProvideValue. A observar, que el nombre de toda clase que herede de MarkupExtension deberá finalizar con "Extension", de forma similar a lo que ocurre con la denominación de las propiedades de dependencia.

Una implementación de una extensión muy sencilla la podemos ver en el listado 10. Un posible uso en de ella en XAML sería:

<TextBlock FontSize="18" Margin="10"
Text="{lcl:ss Text='hola dnm'}">
</TextBlock>

Listado 10
public class ssExtension: MarkupExtension
{
public String Text { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
return Text.ToUpper();
//return "Hi from the extension";
}
}

Enlace a datos en los setters de estilos

Por último, queda resaltar el novedoso uso de bindings en los setters de estilos, ya que, fundamentalmente, nos permitirán referenciar otras propiedades, como podemos ver en el código XAML del listado 11.

Listado 11
<Style x:Key="TextBlockStyle2" TargetType="TextBlock">
<Setter Property="FontFamily"
Value="/SL5;Component/Fonts/Fonts/.zip#Segoe UI/>
<Setter Property="FontSize" Value="0,3,0,0"/>
<Setter Property="Foreground"
Value="{Binding Source={StaticResource SysColors},
Path=ControltextBrush}"/>
</Style>

Nota: La implementación de nuevas extensiones de marcado es realmente directa y solo requiere una simple derivación de la clase System.Windows.Markup. MarkupExtension

Controles

En lo relativo a los controles, se ofrecen varias mejoras generales, como la propiedad ClickCount, que nos ayuda a detectar un doble clic de manera muy fácil. El listado 12 nos muestra cuán sencillo es utilizar esta nueva propiedad. Por otro lado, Silverlight 5 ofrece soporte para múltiples ventanas, que nuestra aplicación podrá mostrar y permitir interactuar con ellas de forma simultánea, en el caso de las aplicaciones OOB (Out-Of- Browser), que se ejecutan fuera del navegador.

Listado 12
private void OnMouseDownClickCount(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 1)
{
// Single click occurred
}
if (e.ClickCount == 1)
{
// Double click occurred
}
if (e.ClickCount == 1)
{
// Triple click occurred
}
}

Gráficos 3D

Una de las demostraciones más espectaculares del Silverlight Firestarter del pasado diciembre fue la relativa a las capacidades 3D. En este caso no se trata de una mejora, característica o funcionalidad, sino de una API totalmente nueva que añade, literalmente, una nueva dimensión a Silverlight.

En cualquier caso, tenemos ante nosotros una innovadora API 3D, acelerada por GPU, que nos proporciona las capacidades necesarias para construir avanzadas visualizaciones y experiencias de usuario.

Aplicaciones de confianza

Algunas características de las aplicaciones de confianza se permiten ahora en el navegador sin que éstas deban ser instaladas, obviamente requiriendo que el fichero XAP disponga de permisos elevados en su seguridad. Las aplicaciones que se ejecuten fuera del navegador (OOB) podrán acceder al sistema de ficheros del usuario (hasta ahora, solo podían acceder a la carpeta Mis Documentos). También se ha añadido soporte de interoperabilidad COM y llamadas P/Invoke para aplicaciones de confianza.

Y aún hay más…

  • Una mejorada latencia de red mediante un interesante cambio en la arquitectura, utilizando un hilo en background para las funciones de red.
  • Un parser de XAML mejorado que acelera el arranque, así como la ejecución de Silverlight en general.
  • Soporte para sistemas operativos de 64 bits.
  • Impresión vectorial.
  • Aceleración por hardware en el modo "sin ventana" (windowless) en Internet Explorer 9.
  • Conciencia de la energía, para poder decidir acciones como no poner el equipo en hibernación o mitigar la pantalla si se está viendo una película.
  • Mejoras en el control PivotViewer.

Conclusiones

Nos hemos dejado en el tintero presentar en mayor detalle algunas de las novedades en Silverlight 5, pero es que son realmente muchas; hasta podríamos decir que algunas de ellas, como las capacidades 3D de Silverlight 5, se merecen uno o más artículos completos. En cualquier caso, animo desde aquí al lector a investigar y probar esas nuevas características, que en poco tiempo estarán totalmente a nuestra disposición.

Compartir en redes sociales


Manuales relacionados
Categorias relacionadas
El autor
José Luis Latorre
CEO de Brainsiders y profesor de Aula Vulcan.
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...