Silverlight 4 Nuevas Características – TextTrimming

Hola , voy a empezar una serie de posts en las cuales voy a explicar algunas de las nuevas características que nos ofrece Silverlight 4, en este primer post empezaremos por uno muy sencillito que es la propiedad TextTrimming de los TextBlock.

En nuestras aplicaciones es muy importante dar al usuario un feedback de todo lo que pasa en la aplicación y muchas veces cuando tenemos DataBinding en nuestros TextBlock no sabemos cual es el contenido y longitud de la frase que se va a colocar en el de manera que muchas veces esa frase se queda cortada y el usuario no sabe si sigue o no y además cual es su contenido.

Imaginemos este TextBlock

image 

Como podéis ver se ve la frase correctamente pero que pasaría si el TextBlock tuviese la anchura mas pequeña? que no veríamos la frase correctamente y el usuario no sabría si hay mas frase

image

Lo lógico es dar un feedbaclk al usuario de que la frase continua, para ello utilizamos la propiedad TextTrimming de los TextBlock, dándole el valor WordEllipsis

image

En este caso en el TextBlock aparecerán unos puntos suspensivos indicando que la frase continua.

 

image

Lo siguiente seria que apareciese un Tooltip con la frase completa para el usuario, esto lo podemos realizar con DataBinding, el XAMl nos quedaría

 

<TextBlock x:Name="textBlock" Height="20" Margin="70,85,318,0" TextWrapping="Wrap"
 Text="Esta es una demostración de la propiedad TextTrimming" VerticalAlignment="Top" 
ToolTipService.ToolTip="{Binding Text, ElementName=textBlock}" TextTrimming="WordEllipsis"/>

WPF y las tarjetas graficas

 

Cuando trabajamos con WPF y aplicamos toda la potencia grafica que tiene, tenemos que tener cuidado con los equipos donde se va a distribuir la aplicación, porque una buena aplicación puede quedar en nada si el equipo donde se instala no es capaz de “moverla” adecuadamente, aparte de tener un buen procesador y memoria uno de los elementos mas importantes es la tarjeta grafica del equipo.

WPF categoriza en tres tipos las tarjetas graficas para decidir como va a renderizar la aplicación, para ello tiene en cuenta factores como:

  • Cantidad de RAM de la tarjeta grafica
  • Si soporta pixel shaders
  • Si soporta vertex shaders
  • ….

Basado en estos factores establece la clasificación de la tarjeta grafica en:

 

Rendering Tier 0: La tarjeta grafica no provee ninguna aceleración hardware, esto corresponde a a una versión menor a DirectX 7.0 y renderizara la aplicación por software perdiendo bastante rendimiento

Rendering Tier 1:La tarjeta grafica nos provee de aceleración hardware parcial. Corresponde a una versión de DirectX mayor que 7 pero menor que 9.

Rendering Tier 2:La tarjeta grafica nos provee de aceleración hardware. Corresponde a una versión de DirectX igual o superior a 9. Vamos a tener el mejor rendimiento para nuestra aplicación WPF

 

Podemos averiguar por código a que grupo pertenece la tarjeta grafica del PC que esta ejecutando nuestra aplicación y tomar medidas como sacar mensajes de advertencia, cambiar los estilos por unos mas sencillos…

Para ello utilizamos la clase System.Windows.Media.RenderCapability y podemos coger a que clase pertenece nuestra tarjeta

   1:   int renderingTier = (RenderCapability.Tier >> 16);
   2:   if (renderingTier == 0)  
   3:      { ... }
   4:   else if (renderingTier == 1) 
   5:      { ... }

 

Para mas información podéis consultar este enlace de MSDN http://msdn2.microsoft.com/en-gb/library/ms742196.aspx

Enlazar un TextBlock a un Comando

Esta fue una duda que me preguntaron, si era posible enlazar un Command a un TexBlock para lanzarlo cuando se hiciera click en el TextBlock. Mi primera respuesta fue no, ya que los TextBlock no soportan Comand Binding, pero luego me lo pensé mejor y les dije que si que lo que se tenia que hacer es rediseñar el template de un Button para que fuese un TextBlock y en este caso al ser un Button ya tenia soporte a Command Binding. y para el usuario era un Textblock

Tan sencillo como

  1. <ControlTemplate TargetType=»Button»>
  2.     <TextBlock Text=»{TemplateBinding Content}» />
  3. </ControlTemplate>
  4. <Button Content=»Foo» Command=»{Binding Bar}» />

Si a veces solo con pensar…

Enlaces Interesantes Silverlight/WPF 03-01-2010

Se acaban las vacaciones de navidad y volvemos a la carga con los posts

 

  • Magellan Diagnostics y Magellan Shared Layouts y Extending the WPF XML namespaces (Paul Stovell)
  • Opening up Silverlight 4 Navigation: Authentication/Authorization in an INavigationContentLoader (David Poll)
  • Day #31: Geocoding and More Fun In Bing Maps for Silverlight (Jeff Blankenburg)
  • Polling Video – A Viable sub-second alternative? (Jesse Liberty)
  • Saving Snapshots to PNG in Silverlight 4 and the WebCam (John Papa)
  • Polling Video – A Viable sub-second alternative? (Jesse Liberty)
  • WCF RIA Services – Dynamically create a criteria on the client-side (Fredrik Normén)
  • Silverlight 4 – WebCams.OnceMoreWithAudio() (Mike Taulty)
  • Silverlight tutorial: HOW TO build CommandLink Control in Silverlight with Expression Blend 3 and Behaviors (Vibor Cipan)
  • Getting the Absolute Position (Kirupa Chinnathambi)
  • WCF RIA Services DomainService life-cycle and adding Transactions (Fredrik Normén)
  • Silverlight HVP Design – Configuration & Scenarios (Jesse Liberty)
  • WPF : New Threading Component (Sacha Barber)