This article has been localized into Portuguese by the community.
O controle TextBox
O controle TextBox é o controle de entrada de texto mais básico encontrado no WPF, permitindo que o usuário final escreva textos simples, em uma única linha, para entrada de diálogo ou em várias linhas, como um editor.
TextBox de uma linha
O controle TextBox é tão comumente usado que você não precisa usar nenhuma propriedade nele para ter um campo de texto editável completo. Aqui está um exemplo:
<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>
Isso é tudo que você precisa para ter um campo de texto. Eu adicionei o texto depois de executar o exemplo e antes de capturar a imagem da tela, mas você também pode fazer isso através da marcação, para preencher a caixa de texto, usando a propriedade Text:
<TextBox Text="Hello, world!" />
Tente clicar com o botão direito do mouse no TextBox. Você receberá um menu de opções, permitindo que você use o TextBox com a área de transferência do Windows. Os atalhos de teclado padrão para desfazer e refazer (Ctrl + Z e Ctrl + Y) também devem funcionar e toda essa funcionalidade é gratuita!
TextBox de múltiplas linhas
Se você executar o exemplo acima, você notará que o controle TextBox por padrão é um controle de linha única. Nada acontece quando você pressiona Enter e se adiciona mais texto do que o que pode caber em uma única linha, o controle simplesmente rola. No entanto, tornar o controle TextBox em um editor de várias linhas é muito simples:
<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>
Eu adicionei duas propriedades: O AcceptsReturn torna o TextBox em um controle de várias linhas, permitindo que o uso da tecla Enter / Return para ir para a próxima linha e a propriedade TextWrapping, que fará o texto quebrar automaticamente quando o final de uma linha é alcançada.
Verificação ortográfica com o TextBox
Como um bônus adicional, o controle TextBox na verdade vem com a verificação ortográfica automática para o inglês e um par de outros idiomas (a partir da escrita, os idiomas inglês, francês, alemão e espanhol são suportados).
Ele funciona muito bem no Microsoft Word, onde os erros de ortografia são sublinhados e você pode clicar com o botão direito do mouse para alternativas sugeridas. Ativar a verificação ortográfica é muito fácil:
<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>
Usamos o exemplo anterior de caixa de texto de múltiplas linhas como base e adicionamos duas novas propriedades: A propriedade da classe SpellCheck chamada IsEnabled, que simplesmente habilita a verificação ortográfica no controle pai e a propriedade Language, que instrui o corretor ortográfico que idioma usar.
Trabalhando com seleções de TextBox
Assim como qualquer outro controle editável no Windows, o TextBox permite a seleção de texto, por exemplo, para apagar uma palavra inteira de uma só vez ou para copiar uma parte do texto para a área de transferência. O TextBox do WPF tem várias propriedades para trabalhar com textos selecionados, todos eles permitem leitura ou mesmo modificação. No próximo exemplo, veremos estas propriedades:
<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>
O exemplo consiste em dois controles TextBox: um para edição e outro para exibir o status da seleção atual. Para isso, definimos a propriedade IsReadOnly como true para impedir a edição do TextBox. Nos inscrevemos no evento SelectionChanged do primeiro TextBox, que tratamos no 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 + "'";
}
}
}
Usaremos três propriedades interessantes para acompanhar isso:
SelectionStart, que nos dá a posição atual do cursor ou se houver uma seleção: Onde ela começa.
SelectionLength, que nos fornece o tamanho da seleção atual, se houver. Caso contrário, apenas retornará 0.
SelectedText, que nos fornece o trecho de texto selecionado, se houver uma seleção. Caso contrário, retorna uma string vazia.
Modificando a seleção
Todas essas propriedades são legíveis e graváveis, o que significa que você pode modificá-las também. Por exemplo, você pode definir as propriedades SelectionStart e SelectionLength para selecionar um intervalo de texto personalizado ou pode usar a propriedade SelectedText para inserir e selecionar uma seqüência de caracteres. Basta lembrar que o TextBox tem que ter o foco, por exemplo chamando primeiro o método Focus() para que isso funcione.