Controles en WPF

by Misael Monterroca 13. January 2008 13:33

En este articulo aprenderemos a utilizar los controles más comunes en Windows Presentation Foundation

 

Controles en WPF

 Existen diferentes tipos de controles en WPF y aún cuando la mayoría son utilizados para tener interacción con el usuario, existen algunos que permiten organizar el posicionamiento de los controles, realizar tareas en segundo plano, incrustar video, etc. Cuando creamos un nuevo proyecto del tipo “Windows Application (WPF)” Visual Studio 2008 nos presentara en la barra de herramientas los diferentes controles de WPF agrupados por las siguientes categorías: 

·         Controles comunes

·         Contenedores comunes

·         Menús y Barras de herramientas

·         Todos los controles

·         Todos los contenedores

 

Controles Comunes

Como su nombre lo indica, son los controles que comúnmente son más utilizados al momento de desarrollar una aplicación:

 

·         Grid

·         Button

·         CheckBox

·         ComboBox

·         Image

·         InkCanvas

·         InkPresenter

·         Label

·         ListBox

·         PasswordBox

·         RadioButton

·         Slider

·         TextBox

 

En este capítulo solo haremos referencia a los controles Grid, Label, Textbox, ComboBox,RadioButton e Image ya que son los controles que exponen una funcionalidad típica en una aplicación.

 

Grid

El control Grid pertenece a la  categoría Contenedores Comunes y como cualquier control de su misma categoría, permite definir el posicionamiento de los diferentes controles que se encuentren dentro de elemento Window. Si no definiéramos un control de LayOut perderíamos la posibilidad de representar gráficamente varios controles como lo demuestra el siguiente ejemplo.

XAML

<Window x:Class="Users_SimpleControls.Window1"
 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 
    Title="Users_SimpleControls" Height="300" Width="300"
 
    >
 
     <Button Height="200" Width="200">Hola</Button> 
 
</Window> 

En el ejemplo anterior, se está creando una ventana con un alto y ancho de 300 pixeles y directamente como un elemento hijo, se le está agregando un control del tipo Button. 

Sin embargo si quisiéramos agregar un segundo botón, el diseñador marcaría un error ya que el elemento Window no está preparado para poder posicionar dos controles diferentes a ese mismo nivel.

 

Imagen 1. Error en el diseñador de Visual Studio 2008

  

El control Grid como mencionamos anteriormente nos permitirá organizar y desplegar nuestros controles pero en formato de cuadricula (Filas y columnas). La tabla 1 muestra los principales elementos del control Grid

 

Elemento

Descripción

ColumDefinition

Permite definir las diferentes columnas que contendrá el grid, asi como las propiedades de cada columna, alto, ancho etc.

RowDefinition

Cada elemento RowDefinition creado, especifica una fila dentro del Grid, también permite especificar el comportamiento de cada fila como, el tamaño máximo, tamaño mínimo etc.

   

Tabla 1. Principales elementos del control Grid

  

Elemento

Descripción

ShowGridLines

Indica si las líneas del grid serán mostradas, de manera predeterminada es false.

BackGround

Especifica un color de fondo

   
 

Tabla 2. Principales propiedades del control Grid

 

En el siguiente ejemplo, crearemos un control Grid que contenga 2 columnas de 150 pixeles de ancho cada una  y 12 filas, el grid mostrara las líneas de división así como un color de fondo blanco.

<Window x:Class="Users_SimpleControls.Window1"
 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 
    Title="Users_SimpleControls" Height="400" Width="300"
 
    >
 
     <Grid ShowGridLines="True" Background="White">
 
          <Grid.ColumnDefinitions>
 
                <ColumnDefinition Width="150"/>
 
                <ColumnDefinition Width="150"/>
 
          </Grid.ColumnDefinitions>
 
          <Grid.RowDefinitions>
 
                <RowDefinition/>
 
                <RowDefinition/>
 
                <RowDefinition/>
 
                <RowDefinition/>
 
                <RowDefinition/>
 
                <RowDefinition/>
 
                <RowDefinition/>
 
                <RowDefinition/>
 
                <RowDefinition/>
 
                <RowDefinition/>
 
                <RowDefinition/>
 
                <RowDefinition/>
 
          </Grid.RowDefinitions>
 
  
     </Grid>
 
</Window>
 

 

    Con las creación de las filas y columnas especificamos el layout que deberá de cumplir nuestra ventana que estamos diseñando, lo que haremos a continuación será indicarle a los controles en qué posición de nuestro grid serán ubicados, es decir en que fila y columna serán desplegados, todos los controles cuentan que la propiedad Grid.Colum y Grid.Row que indican en que columna y que fila será posicionado el control. Partiendo del ejemplo anterior, crearemos un elemento Label (el control será explicando más adelante) el cual será posicionado en la columna 0 fila 2 

<Label Grid.Column="0" Grid.Row="2">Apellido Materno</Label>  

 

Imagen 2. Control Label posicionado dentro del grid

 

El control Grid podría ser el control más utilizado al momento de realizar el LayOut de nuestra ventana ya que permite posicionar los controles como si se tratara de una tabla

 

Si no se especifica ningún valor de dimensión (Height o Width) en el control de Grid ni en su elemento Grid.ColumnDefinitions entonces el control ocupara el 100% del  tamaño de la ventana. En caso de las dimensiones de la ventana sean actualizadas entonces de  manera automática el control Grid reajustara su tamaño para adaptarse de manera automática al nuevo tamaño

 

Label

El control label  permite desplegar texto y posicionarlo en la región que especifiquemos para ello. Las principales propiedades son descritas en la tabla 3

 

Propiedad

Descripción

Content

Asigna el texto que será mostrado dentro del control

Background

Especifica un color de fondo

Label.BorderThickness

Asigna el ancho del borde de la etiqueta

BorderBrush

Especifica el tipo de brocha a utilizar para dibujar el borde

Height

Especifica el alto de la etiqueta

Width

Asigna el ancho de la etiqueta

 

Tabla 3. Principales propiedades del control Label

 

En el siguiente ejemplo crearemos una etiqueta que desplegara el texto “Apellido Materno” y le especificaremos un borde de 2 puntos de ancho de  color rojo

<Label Grid.Column="0" Grid.Row="2" Content="Apellido Materno" BorderBrush="Red">                
                    <Label.BorderThickness>2</Label.BorderThickness>                   
 
         </Label>
 

Imagen 3. Label con las propiedades configuradas

 

TexBox

Permite la captura de información en texto plano por parte del usuario, las principales propiedades son descritas en la tabla 4

 

Propiedad

Descripción

Content

Asigna u obtiene el texto  mostrado dentro del control

Background

Especifica un color de fondo

SpellCheck.IsEnabled

Permite la comprobación de errores gramaticales dentro del control

ContextMenu

Asigna un menú contextual personalizado

Height

Especifica el alto de la etiqueta

Width

Asigna el ancho de la etiqueta

 

Tabla 4. Principales propiedades del control TextBox

En el siguiente ejemplo se crea un control Texbox con un color de fondo “Azure” el texto “Casador” y con la comprobación gramatical activada

<TextBox Grid.Column="1" Grid.Row="2" SpellCheck.IsEnabled="True" Background="Azure">Casador</TextBox>
 

 

 En la siguiente imagen muestra como el corrector gramatical marca con una línea en rojo la palabra “Casador” al dar un clic con el botón derecho, se muestra un menú contextual sugiriendo la palabra correcta “Cazador” 

 

Imagen 4. Texbox con la comprobación gramatical activada

 

ComboBox

Permite desplegar información en forma de lista seleccionable, cada uno de estos elementos tiene  un nombre asignado el cual permite conocer cuál es el valor que el usuario ha seleccionado.

 

En el siguiente ejemplo, crearemos un ComboBox con el nombre “cboRangoEdad” que contendrá 3 elementos del tipo ComboBoxItem, cada uno de ellos corresponde a un rango de edad, al  último elemento se le asignara un color de fondo verde.

<ComboBox Grid.Column="1" Grid.Row="3" Name="cboRangoEdad">
 
                <ComboBoxItem  Name="Rango1">18 a 30 años</ComboBoxItem>
 
                <ComboBoxItem  Name="Rango2">31 a 50 años</ComboBoxItem>
 
                <ComboBoxItem  Name="Rango3" Background="Green">50 en adelante</ComboBoxItem>
 
          </ComboBox> 
 

 

En tiempo de diseño, nos asociaremos al evento “SelectionChanged” el cual se ejecutara cuando el usuario seleccione un elemento dentro del combobox. Primero, crearemos el código que se ejecutara cuando el usuario seleccione un elemento 

void cboRangoEdad_SelectionChanged(object sender, SelectionChangedEventArgs e)
 
      {
 
          ComboBoxItem elementoSeleccionado = cboRangoEdad.SelectedItem as ComboBoxItem;
 
          string mensaje = string.Format("El valor seleccionado es '{0}' con el texto '{1}'",elementoSeleccionado.Name,elementoSeleccionado.Content);
 
          MessageBox.Show(mensaje);
 
      }
 
  El código anterior, mostrara un mensaje con el nombre y el valor del elemento seleccionado, la propiedad “SelectItem” es del tipo object por lo cual es necesario convertirlo al tipo ComboBoxItem y de esa manera, obtener la información de dicho objeto. Lo único que hace falta, es asociar la función “cboRangoEdad_SelectionChanged” con el evento  “SelectionChanged” 
<ComboBox Grid.Column="1" Grid.Row="3" Name="cboRangoEdad" SelectionChanged="cboRangoEdad_SelectionChanged">
 

Imagen 5. Aplicación en ejecución, dar un clic sobre el ComboBox para desplegar la información

 

Imagen 6. Cuando se selecciona un elemento, el evento SelectionChanged es lanzado.

 

RadioButton

 

El control RadioButton permite al usuario seleccionar un valor de manera excluyente dentro de un grupo de elementos, es decir, solo permite la selección de un valor dentro de un determinado grupo. El ComboBox y el RadioButton comparten el mismo objetivo, sin embargo, el primero se presenta como una lista desplegable y el segundo se muestra con el comportamiento de un botón, con lo cual se logra una experiencia de usuario diferente.

 

En el siguiente ejemplo crearemos dos controles del tipo RadioButton los cuales estarán asociados utilizando la propiedad “GroupName”, si el nombre del grupo no es establecido o el nombre del grupo es diferente entonces los controles no quedarían asociados permitiendo al usuario seleccionar ambos controles a la vez.

 

El corrector de ortografía es soportado en los controles TextBox y RichTextBox

 

El control ComboBox permite crear sus elementos a partir la información almacenada en la base de datos, para mayor referencia puede buscar la utilización de las propiedades ItemsSource, DataContext, DisplayMemberPath y SelectedValuePath

<RadioButton Grid.Column="1" Grid.Row="4"  Name="rdEstadoCivilSoltero" GroupName="EstadoCivil">Soltero</RadioButton>
 
     <RadioButton Grid.Column="1" Grid.Row="5"  Name="rdEstadoCivilCasado" GroupName="EstadoCivil">Casado</RadioButton>   
 

En caso de que necesitemos conocer cuál fue el control radiobutton que selecciono el usuario podemos asociarnos al evento “Checked” el cual es ejecutado en el momento en que el usuario selecciona un valor, para implementarlo podernos realizar el siguiente procedimiento.

 Crearemos una función que será llamada por ambos radiobuttons (rdEstadoCivilSoltero y rdEstadoCivilCasado), está función recibe como parámetro el sender, el cual, es el objeto que fue seleccionado, como es del tipo object es necesario convertirlo al tipo RadioButton para poder acceder a su información 

void EstadoCivilSeleccionado(object sender, RoutedEventArgs e)        
{            
    RadioButton objetoSeleccionado = sender as RadioButton;           
     MessageBox.Show(" El valor seleccionado fue " + objetoSeleccionado.Content);        
} 

El siguiente paso, será asociar la función “EstadoCivilSeleccionado” al evento “Checked” de ambos controles

<RadioButton Grid.Column="1" Grid.Row="4"  Name="rdEstadoCivilSoltero" GroupName="EstadoCivil" Checked="EstadoCivilSeleccionado">Soltero</RadioButton>     <RadioButton Grid.Column="1" Grid.Row="5"  Name="rdEstadoCivilCasado" GroupName="EstadoCivil" Checked="EstadoCivilSeleccionado">Casado</RadioButton>  

 

Imagen 8. Cuando un valor es seleccionado, se mostrara un mensaje con la información del mismo.

 

Image

El control image permite visualizar imágenes que se encuentren en cualquiera de los siguientes formatos:

·         BMP

·         JPEG

·         PNG

·         TIFF

·         Windows Media Photo

·         GIF

·         ICON

 

Las principales propiedades son descritas en la tabla 5

 

Propiedad

Descripción

Source

Especifica la ruta en donde se encuentra la imagen a desplegar, incluso podría utilizarse una dirección de internet que contiene la url de la imagen a desplegar

Height

Especifica el alto de la imagen

Width

Asigna el ancho de la imagen

 

Tabla 5. Principales propiedades del control Image

 

En el siguiente ejemplo  mostraremos una imagen gif que tiene transparencia.

<Label Grid.Column="0" Grid.Row="6"  >Imagen</Label>        
       <Image  Grid.Column="1" Grid.Row="6" Source="logoMS.gif" Width="300" Height="35"/>

 

 

Imagen 9. La imagen es visualizada sin embargo, solo los bordes son visualizados ya que la mayoría del cuerpo de la imagen tiene aplicada transparencia

 

Para que la imagen sea visualizada de manera correcta es necesario aplicar un color de fondo, para ello utilizaremos un control de tipo Canvas al cual le aplicaremos un color de fondo azul y por ultimo agregaremos el control Image como un control hijo del control canvas.

<Label Grid.Column="0" Grid.Row="6"  >Imagen</Label>        
       <Image  Grid.Column="1" Grid.Row="6" Source="logoMS.gif" Width="300" Height="35"/>

 

 Articulo Publicado en http://desarrollador.redusers.com/

Tags:

Comments

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading



MVP