Comportamiento y Salud… Mental 1

¿Dónde está el botón por defecto? no te enloquezcas buscándolo ya que no existe ese concepto en Silverlight. Sin embargo, con ayuda de los Behaviors de Expression Blend podemos implementarlo.

Por allá en los tiempos del colegio teníamos una asignatura llamada “Comportamiento y Salud” donde, en principio, nos enseñaron como comportarnos bien. Ahora que lo pienso no puedo recordar nada de la parte “Salud”… lo que puede explicar el por qué tengo los dientes llenos de calzas.

Afortunadamente Silverlight puede aprender a comportarse y a hacer algunas cosas que podemos considerar básicas pero que sus padres no le enseñaron. Aquí es donde Expression Blend le ha dado un empujoncito a Silverlight y lo ha dotado, en otras cosas, de Behaviors.

Todos hemos extrañado el “botón por defecto” que conocemos de muchos otros frameworks pero que no existe en Silverlight. Pues gracias a los Behaviors ahora es posible agregar este “comportamiento” de  una manera fácil y elegante.

Para utlizar los Behaviors, cortesía de Blend, estas extensiones se deben descargar, gratis, aqui. De las varias DLL’s que alli encontrarán solo necesitarán referencia  “System.Windows.Interactivity”.

Para implementar este comportamiento en particular he creado un Behavior que pueden descargar, modificar y utilizarlo libremente en sus proyectos. Debo aclarar que en este post no voy a explicar el detalle del funcionamiento de un Behavior, algo que seguramente haré en un futuro. Lo que si haré es explicar como utilizarlo.

El Behavior se inyecta en el contenedor (Grid, Canvas, etc.) cuyos controles queremos que tengan un “Botón por Defecto”. Este botón por defecto toma el foco presionando la tecla “Enter” o “Return”. Nótese que dije “toma el foco” y no “presiona el botón”, esto implica que el primer “Enter” pasa el foco al botón y un segundo le activa su evento “Click”. El behaviour se puede inyectar directamente en XAML así:

  1. <Grid x:Name=”LayoutRoot” Background=”White”>
  2.     <winint:Interaction.Behaviors>
  3.         <util:clsDefaultButtonBehaviour
  4.            DefaultButton=”{Binding ElementName=NombreBotonPorDefecto}” />
  5.     </winint:Interaction.Behaviors>

 

Obsérvese que aqui de una vez se indica el botón por defecto, que no necesariamente debe estar dentro del contenedor.

Por defecto este comportamiento se suscribe al evento “KeyDown” de los controles dentro del contenedor inyectado. Si se requiere que algunos de los controles no activen el botón por defecto se establece la propiedad “clsDefaultButtonBehaviour.IsUseDefaultBehaviour” a “false”. Si señores, esa es una Attached Property.

Otro detalle importante es que el tipo de controles cuyo “Enter” pasarán el foco al botón por defecto es configurable. Solo los controles definidos en la “ListaAjustable” pasaran el foco al botón por defecto:

  1. Type[] TiposAjustables = new Type[] {
  2.   typeof(TextBox), typeof(PasswordBox), 
  3.   typeof(ListBox), typeof(CheckBox), typeof(RadioButton) };

El demo de este proyecto lo encuentran aquí.

Grandes dilemas, pequeñas soluciones. De la mano de Blend ahora podemos extender la funcionalidad de los controles de modo que… se comporten bien.

Anuncios

Acerca de SilverIdeas

Instructor y entusiasta en el uso de Silverlight y otras tecnologías XAML.
Esta entrada fue publicada en Silverlight. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s