处理WPF文本框输入事件

时间:2011-05-28 08:32:40

标签: .net wpf

我有一个带有默认文字的文本框,例如“输入姓名”

一旦用户开始在文本框中键入一些文本或焦点(使用MouseEnter或KeyboardFocus),我希望默认文本去,只显示用户输入。

但是如果用户将其留空而没有任何输入,然后是MouseLeave或LostKeyboardFocus,我希望重新出现默认文本。

我认为这是我试图实施的最简单的模式,但还没到达那里。

我如何以优雅的标准方式处理它?我是否需要使用自定义变量来跟踪此事件流中的状态或WPF文本框事件是否足够?

伪代码这样做的例子很棒。

2 个答案:

答案 0 :(得分:0)

这里有一些伪代码:

textBox.Text = "Please enter text...";
...
private string defaultText = "Please enter text...";

GotFocus()
{
  if (textBox.Text == defaultText) textBox.Text = string.Empty;
}

LostFocus()
{
  if (textBox.Text == string.Empty) textBox.Text = defaultText;
}

答案 1 :(得分:0)

您可以设置样式触发器以设置键盘丢失焦点上的默认文本,如下所示:

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" >
<Window.Resources>
    <Style x:Key="textboxStyle" TargetType="{x:Type TextBox}" >
        <Style.Triggers>
            <Trigger Property="IsKeyboardFocused" Value="False">
                <Trigger.Setters>
                    <Setter Property="Text" Value="Enter text" />
                </Trigger.Setters>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<StackPanel>
    <TextBox Name="textBoxWithDefaultText" Width="100" Height="30"  Style="{StaticResource textboxStyle}"  TextChanged="textBoxWithDefaultText_TextChanged"/>
    <TextBox Name="textBoxWithoutDefaultText" Width="100" Height="30"  />

</StackPanel>

但是当您使用键盘在TextBox中输入Text时,本地值优先于样式触发器,因为Text是Dependancy Property。因此,要在下次TextBox文本为空时使样式触发器工作,请在后面添加此代码:

    private void textBoxWithDefaultText_TextChanged(object sender, TextChangedEventArgs e)
    {
        if(textBoxWithDefaultText.Text == "")
            textBoxWithDefaultText.ClearValue(TextBox.TextProperty);
    }