TextBox中的水印/提示/占位符文本?

发布于 2022-05-26 23:26:27

当用户在其中输入内容时,如何将一些文本放入TextBox将自动删除的文本?

关注者
0
被浏览
9
1 个回答
  • 面试哥
    面试哥 2022-05-26
    为面试而生,有面试问题,就找面试哥。

    这是一个演示如何在 WPF 中创建水印文本框的示例:

    <Window x:Class="WaterMarkTextBoxDemo.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WaterMarkTextBoxDemo"
        Height="200" Width="400">
    
        <Window.Resources>
    
            <SolidColorBrush x:Key="brushWatermarkBackground" Color="White" />
            <SolidColorBrush x:Key="brushWatermarkForeground" Color="LightSteelBlue" />
            <SolidColorBrush x:Key="brushWatermarkBorder" Color="Indigo" />
    
            <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
            <local:TextInputToVisibilityConverter x:Key="TextInputToVisibilityConverter" />
    
            <Style x:Key="EntryFieldStyle" TargetType="Grid" >
                <Setter Property="HorizontalAlignment" Value="Stretch" />
                <Setter Property="VerticalAlignment" Value="Center" />
                <Setter Property="Margin" Value="20,0" />
            </Style>
    
        </Window.Resources>
    
    
        <Grid Background="LightBlue">
    
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
    
            <Grid Grid.Row="0" Background="{StaticResource brushWatermarkBackground}" Style="{StaticResource EntryFieldStyle}" >
                <TextBlock Margin="5,2" Text="This prompt dissappears as you type..." Foreground="{StaticResource brushWatermarkForeground}"
                           Visibility="{Binding ElementName=txtUserEntry, Path=Text.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}}" />
                <TextBox Name="txtUserEntry" Background="Transparent" BorderBrush="{StaticResource brushWatermarkBorder}" />
            </Grid>
    
            <Grid Grid.Row="1" Background="{StaticResource brushWatermarkBackground}" Style="{StaticResource EntryFieldStyle}" >
                <TextBlock Margin="5,2" Text="This dissappears as the control gets focus..." Foreground="{StaticResource brushWatermarkForeground}" >
                    <TextBlock.Visibility>
                        <MultiBinding Converter="{StaticResource TextInputToVisibilityConverter}">
                            <Binding ElementName="txtUserEntry2" Path="Text.IsEmpty" />
                            <Binding ElementName="txtUserEntry2" Path="IsFocused" />
                        </MultiBinding>
                    </TextBlock.Visibility>
                </TextBlock>
                <TextBox Name="txtUserEntry2" Background="Transparent" BorderBrush="{StaticResource brushWatermarkBorder}" />
            </Grid>
    
        </Grid>
    
    </Window>
    

    TextInputToVisibilityConverter 定义为:

    using System;
    using System.Windows.Data;
    using System.Windows;
    
    namespace WaterMarkTextBoxDemo
    {
        public class TextInputToVisibilityConverter : IMultiValueConverter
        {
            public object Convert( object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture )
            {
                // Always test MultiValueConverter inputs for non-null
                // (to avoid crash bugs for views in the designer)
                if (values[0] is bool && values[1] is bool)
                {
                    bool hasText = !(bool)values[0];
                    bool hasFocus = (bool)values[1];
    
                    if (hasFocus || hasText)
                        return Visibility.Collapsed;
                }
    
                return Visibility.Visible;
            }
    
    
            public object[] ConvertBack( object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture )
            {
                throw new NotImplementedException();
            }
        }
    }
    

    注意:
    这不是我的代码。我在这里找到了它,但我认为这是最好的方法。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看