Compartilhar via


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 plano 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 plano de fundo será restaurada novamente se o usuário remover sua entrada. Veja a ilustração abaixo.

A TextBox with a background image

Observação

A razão pela qual uma imagem de plano de fundo é usada neste exemplo em vez de simplesmente manipular a Text propriedade de , é que uma imagem de plano de fundo não interferirá na vinculação de TextBoxdados.

Exemplo

O XAML a seguir demonstra o seguinte:

<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 TextBox.TextChanged evento:

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

Confira também