Sdílet prostřednictvím


Postupy: Přidání vodoznaku do textového pole

Následující příklad ukazuje, jak zlepšit použitelnost TextBox zobrazením vysvětlujícího obrázku na pozadí uvnitř TextBox, dokud uživatel nevloží text, v tomto okamžiku se obrázek odebere. Kromě toho se obrázek na pozadí obnoví znovu, pokud uživatel odebere svůj vstup. Viz obrázek níže.

Textové pole s obrázkem na pozadí

Poznámka

Důvod, proč je v tomto příkladu použit obrázek na pozadí, namísto jednoduché manipulace s vlastností Text u TextBox, je ten, že použití obrázku na pozadí neovlivní svázání dat.

Příklad

Následující kód XAML ukazuje následující:

<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>

Následující kód zpracovává událost 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

Viz také