今天在看javaScript中发现有onblur和onfocus事件,很轻松了实现了有水印的TextBox,寻思着wpf中是不是也有类似的方法,查找官网api,发现了有LostFocus和GotFocus两个方法,不过,要实现类似效果,你的重写他。代码很简单,直接上:
public class WaterTextBox : TextBox
{
public WaterTextBox()
{
this.Text = "输入内容";
this.Foreground = Brushes.Gray;
}
protected override void OnLostFocus(System.Windows.RoutedEventArgs e)
{
base.OnLostFocus(e);
if (string.IsNullOrEmpty(this.Text))
{
this.Text = "输入内容";
this.Foreground = Brushes.Gray;
}
}
protected override void OnGotFocus(System.Windows.RoutedEventArgs e)
{
base.OnGotFocus(e);
if (this.Text == "输入内容" && this.Foreground == Brushes.Gray)
{
this.Clear();
this.Foreground = Brushes.Black;
}
}
}
定义一个WaterTextBox继承TextBox,重写OnLostFocus和OnGotFocus,前台代码更简单,如下:
<Window x:Class="wpfLostFocus.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:wpfLostFocus"
Title="MainWindow" Height="350" Width="525">
<Grid>
<my:WaterTextBox Width="100" Height="25"></my:WaterTextBox>
<TextBox Margin="208,198,209,92" Text="nihao"/>
</Grid>
</Window>