This article has been localized into Romanian by the community.
Controlul Label
Controlul Etichetă (Label), este forma cea mai simplă, va semăna cu un TextBlock, pe care l-am folosit în alt articol. Vei observa rapid că în locul proprietății Text, Eticheta are proprietatea Content. Motivul este că Eticheta poate conține orice tip de control direct în ea, nu doar text. Acest conținut poate fi un string sau de asemenea, așa cum puteți vedea în primul și cel mai ușor exemplu:
<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>
Ce veți mai observa este faptul că Eticheta, în mod standard, are un pic de margine, permițând textului să fie afișat la câțiva pixeli față de colțul de sus-stânga. Aceasta nu se întâmplă și cu controlul TextBlock, unde trebuie să îl specificați manual.
Într-un caz simplu ca acesta, unde conținutul este un string (șir de caractere), Eticheta va crea în interiorul ei un TextBlock și va afișa un string în acesta.
Controlul Etichetă vs. controlul TextBlock
Așa că de ce sa folosiți o Etichetă? Păi, sunt câteva diferențe importante între Etichetă și TextBlock. TextBlockul va permite afișarea a unui text string, în timp ce un Label va permite de asemenea și:
- Specificarea unui cadru (border)
- Afișarea altor controale, ex. o imagine
- Folosirea unui conținut șablon folosind proprietatea ContentTemplate
- Folosirea unor chei de acces pentru a focaliza controalele aferente
Ultimul punct de mai sus este motivul principal datorită căruia folosiți un control Eticheta și nu unul TextBlock. Oricând vreți să afișați un text simplu, ar trebui să folosiți un control TextBlock, din moment ce consumă mai puține resurse și se comportă mai bine decât o Etichetă în marea majoritate a cazurilor.
Eticheta și Cheile de acces (mnemonice)
În Windows, cât și în alte sisteme de operare, este o practică comună ca să accesați controalele de acces într-un dialog prin menținerea apăsată a tastei [Alt] și apoi apăsând caracterul ce corespunde controlului ce doriți a-l accesa. Caracterul ce trebuie apăsat va fi evidențiat atunci când mențineți apăsată tasta [Alt]. Controlul TextBlock nu deține această funcționalitate, dar Eticheta o are, așa că pentru etichetarea controalelor, controlul Etichetă este de obicei alegerea excelentă. Mai jos veți observa un exemplu ce evidențiază acest fapt:
<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>
Captura de ecran ne arată un exemplu de Dialog așa cum arată atunci când tasta Alt este apăsată. Încercați să rulați, apăsând tasta [Alt] și apăsând tasta N, apoi M. Veți observa cum se mută focalizarea între cele două textbox-uri.
Așadar, există mai multe concepte noi aici. Mai întâi, definim cheia de acces prin plasarea unui underscore (_) înaintea caracterului. Nu trebuie să fie primul caracter, poate fi înaintea oricărui caracter din conținutul Etichetei. De obicei de folosește primul caracter, ce nu este deja folosit deja ca și cheie de acces pentru alt control.
Folosim proprietatea Target pentru a lega Eticheta cu controlul dorit. Folosim o legătură WPF (WPF binding) comună pentru aceasta, folosim proprietatea ElementName, pe care o vom descrie mai târziu în acest tutorial. Legătura se bazează pe numele controlului, așa că dacă veți schimba numele, va trebui să vă amintiți să schimbați și legătura.
Folosirea controalelor ca și conținutul Label-ului
Așa cum am menționat, controlul Label permite afișarea altor controale, oferind în același timp și restul beneficiilor. Vom încerca un exemplu unde vom afișa atât o imagine, cât și o bucată de text, în interiorul Label-ului și în același timp având o cheie de acces pentru fiecare 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>
Aceasta este o versiune extinsă a exemplului anterior - în loc de un simplu text string, Eticheta va afișa imaginea și textul (în interiorul controlului AccessText, ce ne permite să folosim cheie de acces pentru etichetă). Ambele controale eu in interior un StackPanel orizontal, din moment ce Eticheta, ca orice derivată ContentControl, nu poate afișa mai mult decât un direct control copil.
Controlul imagine, descris mai târziu în tutorial, folosește o imagine la distanță (remote) - aceasta este DOAR pentru motive demonstraționale și NU este o idee bună pentru marea majoritate a aplicațiilor.
Sumar
În marea majoritate a situațiilor, controlul Etichetă face exact ce implică numele: Se comportă ca o etichetă text pentru un alt control. Acesta este principalul ei scop. Pentru alte cazuri, ar trebui să folosiți un control TextBlock sau alte containere text pe care vi le oferă WPF.