This article has been localized into Italian by the community.
Il controllo TextBlock
La TextBlock non è un controllo dal momento che non eredita dalla classe Control, ma è usato come qualsiasi altro controllo nel framework WPF, quindi lo chiameremo controllo per mantenere le cose semplici.
Il "controllo" TextBlock è uno dei più importanti controlli in WPF data la sua utilità. Permette di inserire del testo sullo schermo, come fa una Label, ma in modo più semplice e impiegando meno risorse. Uso comune è che la Label è utilizzata per un testo corto a linea singola (ma può includere un'immagine) mentre una TextBlock lavora molto meglio con le stringhe multi-linea, ma può contenere solo testo (stringhe). Sia la Label che la TextBlock offrono dei vantaggi, che puoi decidere di sfruttare a seconda della situazione.
Abbiamo già utilizzato un controllo TextBlock nell'articolo "Hello, WPF!", ma per adesso, andiamo a vedere la TextBlock nella sua forma più semplice:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="100" Width="200">
<Grid>
<TextBlock>This is a TextBlock</TextBlock>
</Grid>
</Window>
È semplice come sembra e se hai letto il capitolo precedente del tutorial, non troverai nulla di nuovo. Il testo tra la TextBlock è semplicemente un modo per valorizzare la proprietà Text della TextBlock.
Nel prossimo esempio, proviamo un testo più lungo per mostrare come si comporta il TextBlock. Ho aggiunto anche un po' di margine per migliorare il look.
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="100" Width="200">
<Grid>
<TextBlock Margin="10">This is a TextBlock control and it comes with a very long text</TextBlock>
</Grid>
</Window>
Trattare le stringhe lunghe
Come ben presto ti renderai conto dallo screenshot, il TextBlock è perfettamente in grado di gestire testi lunghi e multi-linea, ma non farà nulla di default. In questo caso il testo è troppo lungo per essere visualizzato all'interno della finestra, quindi WPF mostra il testo il più possibile e poi si ferma.
Fortunatamente, ci sono diversi modi per evitare questo. Nel prossimo esempio te li mostrerò tutti e poi ti spiegherò ciascuno di loro in seguito:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="200" Width="250">
<StackPanel>
<TextBlock Margin="10" Foreground="Red">
This is a TextBlock control<LineBreak />
with multiple lines of text.
</TextBlock>
<TextBlock Margin="10" TextTrimming="CharacterEllipsis" Foreground="Green">
This is a TextBlock control with text that may not be rendered completely, which will be indicated with an ellipsis.
</TextBlock>
<TextBlock Margin="10" TextWrapping="Wrap" Foreground="Blue">
This is a TextBlock control with automatically wrapped text, using the TextWrapping property.
</TextBlock>
</StackPanel>
</Window>
Qui abbiamo tre controlli TextBlock, ognuno dei quali con un colore differente (usando la proprietà Foreground) per una vista migliore. Gestiscono tutti il testo lungo in modi differenti:
Il Textblock rosso usa un tag LineBreak per andare a capo in un punto specifico. Questo ti dà assoluto controllo su dove vuoi che il testo vada a capo, ma non è molto flessibile nella maggior parte delle situazioni. Se l'utente ingrandisce la finestra, il testo andrà a capo nella stessa posizione, anche se ci sarebbe abbastanza spazio per mostrare l'intero testo su di una singola riga.
Il TextBlock verde usa la proprietà TextTrimming con il valore CharacterEllipsis per fare in modo che il TextBlock mostri un ellisse (...) quando non può più contenere testo nel controllo. È buona norma mostrare che c'è più testo, ma non c'è abbastanza spazio per visualizzarlo. È un buon sistema quando hai del testo lungo ma non vuoi assolutamente utilizzare più di una riga. Come alternativa a CharacterEllipsis puoi utilizzare WordEllipsis, che taglierà il testo alla fine dell'ultima parola che può essere inserita nella riga, invece dell'ultima lettera, impedirà che l'ultima parola venga mostrata solo in parte.
Il TextBlock blu usa la proprietà TextWrapping con il valore Wrap, che manderà a capo il testo ogni volta che finisce lo spazio in una riga. Contrariamente al primo TextBlock, dove definivamo manualmente dove mandare a capo il testo, qui avviene in modo completamente automatico ed anche meglio: aggiusta anche automaticamente non appena il TextBlock ha più o meno spazio disponibile. Prova ad ingrandire e ridurre la finestra e vedrai come il wrapping si aggiorna in base alla situazione.
Qui si è trattato su come gestire semplici stringhe nelle TextBlock. Nel prossimo capitolo esamineremo alcune delle funzionalità più avanzate delle TextBlock, che ci consentono di creare testo di vari stili all'interno di esse e molto altro.