This article has been localized into Italian by the community.
Il controllo Label
Il controllo Label, nella sua forma più semplice, assomiglia molto al TextBlock che abbiamo usato in un altro articolo. Noterai rapidamente che invece di una proprietà Text, Label ha una proprietà Content. La ragione è che Label può ospitare qualsiasi tipo di controllo direttamente al suo interno, anziché solo il testo. Questo contenuto può essere anche una stringa, come vedrai in questo primo e molto semplice esempio:
<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>
Un'altra cosa che puoi notare è che Label, per impostazione predefinita, ha un po 'di padding, permettendo di renderizzare il testo a pochi pixel di distanza dall'angolo in alto a sinistra. Questo non è il caso del controllo TextBlock, dove dovrai specificarlo manualmente.
In un caso semplice come questo, dove il contenuto è semplicemente una stringa, Label creerà effettivamente un TextBlock internamente e mostrerà la stringa.
Il controllo Label contro il controllo Textbox
Perché usare un'etichetta, allora? Bene, ci sono alcune importanti differenze tra Label e TextBlock. TextBlock ti consente solo di eseguire il rendering di una stringa di testo, mentre l'etichetta consente anche di:
- Indicare un bordo
- Renderizzare altri controllo, es. un immagine
- Utilizzare il contenuto basato su modelli tramite la proprietà ContentTemplate
- Utilizza i tasti di scelta per dare priorità ai controlli correlati
L'ultimo punto elenco è in realtà uno dei motivi principali per l'utilizzo di un'etichetta sul controllo TextBlock. Ogni volta che vuoi renderizzare del semplice testo, dovresti usare il controllo TextBlock, poiché è più leggero e offre prestazioni migliori rispetto all'etichetta nella maggior parte dei casi.
Label e tasti di accesso (mnemonici)
In Windows e in altri sistemi operativi, è prassi comune accedere ai controlli in una finestra di dialogo tenendo premuto il tasto [Alt] e quindi premendo un carattere che corrisponde al controllo a cui si desidera accedere. Il carattere da premere verrà evidenziato quando si tiene premuto il tasto [Alt]. I controlli TextBlock non supportano questa funzionalità, ma Label lo fa, quindi per le etichette di controllo, il controllo Label è di solito un'ottima scelta. Diamo un'occhiata ad un esempio:
<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>
Lo screenshot mostra la nostra finestra di esempio come appare quando viene premuto il tasto [Alt]. Prova a eseguirlo, tenendo premuto il tasto [Alt] e poi premendo N e M. Vedrai come viene spostata la messa a fuoco tra le due caselle di testo.
Qui ci sono molti nuovi concetti. Prima di tutto, definiamo la chiave di accesso posizionando un carattere di sottolineatura (_) prima del carattere. Non deve essere il primo carattere, può essere prima di uno qualsiasi dei caratteri nel contenuto dell'etichetta. La pratica comune è quella di utilizzare il primo carattere che non è già utilizzato come chiave di accesso per un altro controllo.
Utilizziamo la proprietà Target per connettere Label e il controllo designato. Per questo utilizziamo un binding WPF standard, utilizzando la proprietà ElementName, che descriverò più avanti in questo tutorial. L'associazione si basa sul nome del controllo, quindi se cambi questo nome, dovrai anche ricordarti di cambiare l'associazione.
Utilizzo di controlli come contenuto dell'etichetta
Come già accennato, il controllo Label consente di ospitare altri controlli mantenendo gli altri vantaggi. Proviamo un esempio in cui abbiamo sia un'immagine sia una porzione di testo all'interno della Label, pur avendo anche una chiave di accesso per ciascuna delle 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>
Questa è solo una versione estesa dell'esempio precedente: al posto di una semplice stringa di testo, la nostra etichetta ora ospiterà sia l'immagine sia una parte di testo (all'interno del controllo AccessText, che ci consente di utilizzare ancora un codice di accesso per l'etichetta) . Entrambi i controlli si trovano all'interno di uno StackPanel orizzontale, poiché l'etichetta, proprio come qualsiasi altro derivato di ContentControl, può ospitare solo un controllo figlio diretto.
Il controllo Image, descritto più avanti in questo tutorial, usa un'immagine remota - questo è SOLO per scopi dimostrativi e NON è una buona idea per la maggior parte delle applicazioni della vita reale.
Sommario
Nella maggior parte delle situazioni, il controllo Label fa esattamente ciò che il nome implica: agisce come un'etichetta di testo per un altro controllo. Questo è il suo scopo principale. Per la maggior parte degli altri casi, dovresti probabilmente utilizzare un controllo TextBlock o uno degli altri contenitori di testo offerti da WPF.