我有一个带有默认文字的文本框,例如“输入姓名”
一旦用户开始在文本框中键入一些文本或焦点(使用MouseEnter或KeyboardFocus),我希望默认文本去,只显示用户输入。
但是如果用户将其留空而没有任何输入,然后是MouseLeave或LostKeyboardFocus,我希望重新出现默认文本。
我认为这是我试图实施的最简单的模式,但还没到达那里。
我如何以优雅的标准方式处理它?我是否需要使用自定义变量来跟踪此事件流中的状态或WPF文本框事件是否足够?
伪代码这样做的例子很棒。
答案 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);
}