This article has been localized into Italian by the community.
Il controllo TextBox
Il controllo TextBox è il controllo più basilare per immettere del testo reperibile in WPF, che consente all'utente finale di scrivere del testo, sia su una linea singola, per immettere dati di input, sia su più linee, come un editor di testo.
TextBox ad una sola linea.
Il controllo TextBox è così comunemente usato che non è necessario utilizzare alcuna proprietà su di esso per avere un campo di testo completamente editabile. Ecco un semplice esempio:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBoxSample" Height="80" Width="250">
<StackPanel Margin="10">
<TextBox />
</StackPanel>
</Window>
Questo è tutto ciò che serve per ottenere un campo di testo. Ho aggiunto il testo dopo aver eseguito l'esempio e prima di prendere lo screenshot, ma puoi farlo pure tramite markup, per precompilare la casella di testo, usando la proprietà Text:
<TextBox Text="Hello, world!" />
Prova a fare clic con il pulsante destro nel TextBox. Otterrai un menu di opzioni che ti consentirà di utilizzare il TextBox con gli Appunti di Windows. Anche le scorciatoie da tastiera predefinite per annullare e ripristinare (Ctrl + Z e Ctrl + Y) dovrebbero funzionare e tutte queste funzionalità sono gratuite!
TextBox multilinea
Se si esegue l'esempio precedente, si noterà che il controllo TextBox, per impostazione predefinita è un controllo a riga singola. Non succede niente quando premi Invio e se aggiungi più testo di quello che può essere contenuto su una singola riga, il controllo scorre semplicemente. Tuttavia, rendere il controllo TextBox in un editor multi-linea è molto semplice:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBoxSample" Height="160" Width="280">
<Grid Margin="10">
<TextBox AcceptsReturn="True" TextWrapping="Wrap" />
</Grid>
</Window>
Ho aggiunto due proprietà: AcceptsReturn rende il controllo TextBox un controllo multilinea, consentendo l'uso del tasto Invio / Ritorno per passare alla riga successiva e la proprietà TextWrapping, che causerà un 'a capo automatico' quando viene raggiunta la fine di una linea.
Controllo ortografico con TextBox
Come bonus aggiuntivo, il controllo TextBox viene fornito con il controllo ortografico automatico per l'inglese e un paio di altre lingue (come per la scrittura, sono supportate le lingue inglese, francese, tedesco e spagnolo).
Si comporta molto come Microsoft Word, dove gli errori di ortografia sono sottolineati e si può cliccare col tasto destro per le alternative suggerite: Abilitare il controllo ortografico è molto semplice :
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBoxSample" Height="160" Width="280">
<Grid Margin="10">
<TextBox AcceptsReturn="True" TextWrapping="Wrap" SpellCheck.IsEnabled="True" Language="en-US" />
</Grid>
</Window>
Abbiamo utilizzato il precedente esempio di TextBox multilinea come base e quindi ho aggiunto due nuove proprietà: La proprietà associata dalla classe SpellCheck chiamata IsEnabled, che consente semplicemente il controllo ortografico sul controllo padre e la proprietà Language, che indica al correttore ortografico quale lingua usare.
Lavorare con le selezioni di TextBox
Proprio come qualsiasi altro controllo modificabile in Windows, il TextBox consente la selezione del testo, ad es. per cancellare un'intera parola in una sola volta o per copiare un pezzo di testo negli Appunti. Il TextBox WPF ha diverse proprietà per lavorare con il testo selezionato, tutte queste possono essere lette o persino modificate. Nel prossimo esempio, leggeremo queste proprietà:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSelectionSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBoxSelectionSample" Height="150" Width="300">
<DockPanel Margin="10">
<TextBox SelectionChanged="TextBox_SelectionChanged" DockPanel.Dock="Top" />
<TextBox Name="txtStatus" AcceptsReturn="True" TextWrapping="Wrap" IsReadOnly="True" />
</DockPanel>
</Window>
L'esempio è costituito da due controlli TextBox: uno per la modifica e uno per l'output dello stato della selezione corrente. Per questo, impostiamo la proprietà IsReadOnly su True, per impedire la modifica del TextBox di stato. Sottoscriviamo l'evento SelectionChanged sul primo TextBox, che gestiamo nel Code-behind:
using System;
using System.Text;
using System.Windows;
using System.Windows.Controls;
namespace WpfTutorialSamples.Basic_controls
{
public partial class TextBoxSelectionSample : Window
{
public TextBoxSelectionSample()
{
InitializeComponent();
}
private void TextBox_SelectionChanged(object sender, RoutedEventArgs e)
{
TextBox textBox = sender as TextBox;
txtStatus.Text = "Selection starts at character #" + textBox.SelectionStart + Environment.NewLine;
txtStatus.Text += "Selection is " + textBox.SelectionLength + " character(s) long" + Environment.NewLine;
txtStatus.Text += "Selected text: '" + textBox.SelectedText + "'";
}
}
}
Usiamo tre interessanti proprietà per realizzarlo:
SelectionStart , che ci dà la posizione corrente del cursore o se c'è una selezione: Dove inizia.
SelectionLength, che ci dà la lunghezza della selezione corrente, se presente. Altrimenti restituirà 0.
SelectedText, che ci dà la stringa attualmente selezionata se c'è una selezione. Altrimenti viene restituita una stringa vuota.
Modificare la selezione
Tutte queste proprietà sono sia leggibili che scrivibili, il che significa che è possibile modificarle. Ad esempio, è possibile impostare le proprietà SelectionStart e SelectionLength per selezionare un intervallo di testo personalizzato oppure utilizzare la proprietà SelectedText per inserire e selezionare una stringa. Ricorda che il TextBox deve avere lo stato attivo, ad es. chiamando prima il metodo Focus (), perché funzioni.