Como adicionar uma marca d'água a um TextBox
O exemplo a seguir mostra como ajudar a usabilidade de um TextBox exibindo uma imagem de fundo explicativa dentro do TextBox até que o usuário insira texto, momento em que a imagem é removida. Além disso, a imagem de fundo é restaurada novamente se o usuário remover sua entrada. Veja a ilustração abaixo.
Observação
A razão pela qual uma imagem de plano de fundo é usada neste exemplo, em vez de simplesmente manipular a propriedade Text de TextBox, é que uma imagem de plano de fundo não interferirá na vinculação de dados.
Exemplo
O seguinte XAML demonstra o seguinte:
- Declarar o recurso
watermark
. Faça o download da imagem do GitHub. - Definir a propriedade
TextBox.Background
para os recursos. - Configurando o evento
TextBox.TextChanged
.
<Window x:Class="watermark.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<ImageBrush x:Key="watermark" ImageSource="textboxbackground.gif" AlignmentX="Left" Stretch="None" />
</Window.Resources>
<StackPanel>
<TextBox Name="myTextBox" TextChanged="OnTextBoxTextChanged" Width="200" Background="{StaticResource watermark}" />
</StackPanel>
</Window>
O código a seguir manipula o evento TextBox.TextChanged
:
private void OnTextBoxTextChanged(object sender, TextChangedEventArgs e)
{
if (sender is TextBox box)
{
if (string.IsNullOrEmpty(box.Text))
box.Background = (ImageBrush)FindResource("watermark");
else
box.Background = null;
}
}
Private Sub OnTextBoxTextChanged(sender As Object, e As TextChangedEventArgs)
If TypeOf sender Is TextBox Then
Dim box As TextBox = DirectCast(sender, TextBox)
If String.IsNullOrEmpty(box.Text) Then
box.Background = DirectCast(FindResource("watermark"), ImageBrush)
Else
box.Background = Nothing
End If
End If
End Sub
Ver também
- Visão geral do TextBox
- Visão geral do RichTextBox
.NET Desktop feedback