This article has been localized into Spanish by the community.
El control Label
El control Label, en su forma más simple, se parecerá mucho al TextBlock que usamos en otro artículo. Sin embargo, rápidamente notará que en lugar de una propiedad de Text, tiene una propiedad Content. La razón de esto es que Label puede alojar cualquier otro tipo de control directamente dentro de él, en lugar de solo texto. Este contenido también puede ser una cadena, como verá en este primer y muy básico ejemplo:
<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LabelControlSample" Height="100" Width="200">
<Grid>
<Label Content="This is a Label control." />
</Grid>
</Window>
Otra cosa que puedes notar es que el control Label, por defecto, tiene un poco de padding, permitiendo al texto ser renderizado a pocos pixels del alto y de la esquina izquierda. Este no es el caso para el TextBlock, donde tú puedes especificarlo manualmente.
En un caso sencillo como este, donde el contenido es simplemente una cadena de texto, el Label creará un TextBlock internamente y mostrará la cadena en él.
El control Label vs el control TextBlock
Así que ¿Por qué usar el control Label? Bien, hay pocas diferencias importantes entre el Label y el TextBlock. El TextBlock sólo permite renderizar una cadena de texto, mientras que el Label te permite:
- Especificar un borde
- Renderizar otros controles, por ejemplo, una imagen.
- Usar templates a través de la propiedad ContentTemplate
- Usar teclas de acceso para posicionar el foco en el control relacionado
El último punto es uno de los principales motivos para usar el Label en vez del control TextBlock. Cuando sólo quieras renderizar texto sencillo, deberías usar el TextBlock, ya que es más ligero y funciona mejor que el Label en la mayoría de los casos.
Label y Teclas de Acceso (mnemotécnicos)
En Windows y otros sistemas operativos también, es una práctica común que tú puedas acceder a controles en un diálogo pulsando la tecla [Alt] y pulsando el caracter que corresponda al control que deseas acceder. El caracter a presionar será sobresaltado cuando tú pulses la tecla [Alt]. El control TextBlock no soporta esta funcionalidad, pero el Label sí, así que para controlar etiquetas, el control Label es normalmente una excelente opción. Veamos un ejemplo de ello en acción:
<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LabelControlSample" Height="180" Width="250">
<StackPanel Margin="10">
<Label Content="_Name:" Target="{Binding ElementName=txtName}" />
<TextBox Name="txtName" />
<Label Content="_Mail:" Target="{Binding ElementName=txtMail}" />
<TextBox Name="txtMail" />
</StackPanel>
</Window>
La captura de pantalla muestra nuestro diálogo como aparece cuando se presiona la tecla ALT. Intenta ejecutarlo, manteniendo presionada la tecla [Alt] y entonces presiona N y M. Verás como cambia el foco entre los dos Textbox.
Hay unos cuantos nuevos conceptos aquí. Primero, definimos la tecla de acceso poniéndo una barra baja (_) antes del carácter. No tiene por qué ser el primer carácter, puede estar antes de cualquiera de los caracteres en el contenido de tu Label. Lo normal es usarlo en el primer carácter que no está siendo usado como tecla de acceso en otro control.
Usamos la propiedad Target para conectar el Label y el control designado. Usamos un enlace estándar de WPF (Bind), usando el la propiedad ElementName, como describiremos más adelante en este tutorial. El enlace (Bind) está basado en el nombre del control, así que si cambias el nombre, también tendrás que acordarte de cambiar el enlace (Bind)
Usando controles como contenido de un Label
Como ya hemos comentado, el control Label te permite alojar otros controles, mientras mantiene los otros beneficios. Probemos con un ejemplo donde tenemos tanto una imagen como un trozo de texto dentro de un Label, mientras tenemos una tecla de acceso para cada uno de los Label:
<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlAdvancedSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LabelControlAdvancedSample" Height="180" Width="250">
<StackPanel Margin="10">
<Label Target="{Binding ElementName=txtName}">
<StackPanel Orientation="Horizontal">
<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_green.png" />
<AccessText Text="_Name:" />
</StackPanel>
</Label>
<TextBox Name="txtName" />
<Label Target="{Binding ElementName=txtMail}">
<StackPanel Orientation="Horizontal">
<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_blue.png" />
<AccessText Text="_Mail:" />
</StackPanel>
</Label>
<TextBox Name="txtMail" />
</StackPanel>
</Window>
Ésta es una simple extensión del ejemplo anterior - en vez de usar una simple cadena de caracteres, nuestro Label contiene tanto una imagen como un trozo de texto (dentro de un control AccessText, lo que nos permite usar la tecla de acceso para el Label). Ambos controles están dentro de un StackPanel horizontal, ya que el Label, como cualquier otro derivado de ContentControl, sólo puede contener un control hijo.
El control Image, descrito posteriormente en este tutorial, usa una imagen remota - esto es ÚNICAMENTE como demostración y NO es una buena idea en la mayoría de aplicaciones reales.
Resumen
En la mayoría de las situaciones, el control Label hace exactamente lo que el nombre implica: Actúa como etiqueta de texto para otro control. Ésta es la funcionalidad principal. Para la mayoría de otros casos, probablemente deberías utilizar un TextBlock o uno de los otros contenedores de texto que ofrece WPF.