我如何在用户输入内容时将一些文本放入自动删除的TextBox中?
这是一个示例,演示如何在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(); } } }
注意: 这不是我的代码。我在这里找到了,但是我认为这是最好的方法。