This article has been localized into Catalan by the community.
El control Label
El control Label, en la seva forma més simple, s'assemblarà molt al TextBlock que usem en un altre article. No obstant això, ràpidament notarà que en lloc d'una propietat de Text, té una propietat Content. La raó d'això és que Label pot allotjar qualsevol altre tipus de control directament dins d'ell, en lloc de sol text. Aquest contingut també pot ser una cadena, com veurà en aquest primer i molt bàsic exemple:
<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>
Una altra cosa que pots notar és que el control Label, per defecte, té una mica de padding, permetent al text ser renderitzat a pocs píxels de l'alt i de la cantonada esquerra. Aquest no és el cas per al TextBlock, on tu pots especificar-lo manualment.
En un cas senzill com aquest, on el contingut és simplement una cadena de text, el Label crearà un TextBlock internament i mostrarà la cadena en ell.
El control Label vs el control TextBlock
Així que, per què usar el control Label? Bé, hi ha poques diferències importants entre el Label i el TextBlock. El TextBlock només permet renderitzar una cadena de text, mentre que el Label et permet:
- Especificar una vora
- Renderitzar altres controls, per exemple, una imatge.
- Usar templates a través de la propietat ContentTemplate
- Usar tecles d'accés per a posicionar el focus en el control relacionat
L'últim punt és un dels principals motius per a usar el Label en comptes del control TextBlock. Quan només vulguis renderitzar text senzill, hauries d'usar el TextBlock, ja que és més lleuger i funciona millor que el Label en la majoria dels casos.
Label i Tecles d'Accés (mnemotècnics)
A Windows i altres sistemes operatius també, és una pràctica comuna que tu puguis accedir a controls en un diàleg prement la tecla [Alt] i prement el caràcter que correspongui al control que desitges accedir. El caràcter a pressionar serà sobresaltat quan tu premis la tecla [Alt]. El control TextBlock no suporta aquesta funcionalitat, però el Label sí, així que per a controlar etiquetes, el control Label és normalment una excel·lent opció. Vegem un exemple d'això en acció:
<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 mostra el nostre diàleg com apareix quan es pressiona la tecla ALT. Intenta executar-ho, mantenint pressionada la tecla [Alt] i llavors pressiona N i M. Veuràs com canvia el focus entre els dos Textbox.
Hi ha uns quants nous conceptes aquí. Primer, definim la tecla d'accés possant-hi una barra baixa (_) abans del caràcter. No té per què ser el primer caràcter, pot estar abans que qualsevol dels caràcters en el contingut del teu Label. Es una pràctica habitual fer servir el primer caràcter, que no està sent usat com a tecla d'accés en un altre control.
Usem la propietat Target per a connectar el Label i el control designat. Usem un enllaç estàndard de WPF (Bind), usant el la propietat ElementName, com descriurem més endavant en aquest tutorial. L'enllaç (Bind) està basat en el nom del control, així que si canvies el nom, també hauràs de recordar-te de canviar l'enllaç (Bind)
Emprant controls com a contingut d'un Label
Com ja hem comentat, el control Label et permet allotjar altres controls, mentre manté els altres beneficis. Provem amb un exemple on tenim tant una imatge com un tros de text dins d'un Label, mentre tenim una tecla d'accés per a cadascun dels 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>
Aquesta és una simple extensió de l'exemple anterior - en comptes d'usar una simple cadena de caràcters, el nostre Label conté tant una imatge com un tros de text (dins d'un control AccessText, la qual cosa ens permet usar la tecla d'accés per al Label). Tots dos controls estan dins d'un StackPanel horitzontal, ja que el Label, com qualsevol altre derivat de ContentControl, només pot contenir un control fill.
El control Image, descrit posteriorment en aquest tutorial, usa una imatge remota - això és ÚNICAMENT com a demostració i NO és una bona idea en la majoria d'aplicacions reals.
Resum
A la majoria de les situacions, el control Label fa exactament el que el nom implica: Actua com a etiqueta de text per a un altre control. Aquesta és la funcionalitat principal. Per a la majoria d'altres casos, probablement hauries d'utilitzar un TextBlock o un dels altres contenidors de text que ofereix WPF.