1、参考https://www.cnblogs.com/nocanstillbb/p/10709380.html
https://www.jianshu.com/p/2c4fe0e31e33
2、引用Microsoft.Xaml.Behaviors.Wpf这个Nuget包,代码
using Microsoft.Xaml.Behaviors;
public class WatermarkBehavior : Behavior<TextBox>
{
public static readonly DependencyProperty WatermarkProperty;
static WatermarkBehavior()
{
WatermarkProperty = DependencyProperty.Register("Watermark", typeof(string), typeof(WatermarkBehavior), new PropertyMetadata(default(string)));
}
bool _hasContent = false;
protected override void OnAttached()
{
base.OnAttached();
var textBox = AssociatedObject;
textBox.GotFocus += TextBox_GotFocus;
textBox.LostFocus += TextBox_LostFocus;
textBox.Loaded += (o, e) =>
{
if (!string.IsNullOrEmpty(textBox.Text))
{
_hasContent = true;
textBox.FontStyle = FontStyles.Normal;
}
else
{
_hasContent = false;
if (!String.IsNullOrEmpty(Watermark))
{
textBox.Foreground = Brushes.Gray;
textBox.Text = Watermark;
textBox.FontStyle = FontStyles.Italic;
}
}
};
}
private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
var textBox = sender as TextBox;
if (string.IsNullOrEmpty(textBox.Text))
{
_hasContent = false;
if (!string.IsNullOrEmpty(Watermark))
{
textBox.Text = Watermark;
textBox.FontStyle = FontStyles.Italic;
textBox.Foreground = Brushes.Gray;
}
}
else
{
_hasContent = true;
textBox.FontStyle = FontStyles.Normal;
}
}
private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
var textBox = sender as TextBox;
if (!string.IsNullOrEmpty(Watermark) && !_hasContent)
{
textBox.Text = "";
textBox.Foreground = Brushes.Black;
textBox.FontStyle = FontStyles.Normal;
}
}
public string Watermark
{
get
{
return GetValue(WatermarkProperty) as string;
}
set
{
SetValue(WatermarkProperty, value);
}
}
protected override void OnDetaching()
{
base.OnDetaching();
var textBox = AssociatedObject;
textBox.GotFocus -= TextBox_GotFocus;
textBox.LostFocus -= TextBox_LostFocus;
}
}
3、XAML
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
<TextBox FontSize="15" Height="25" HorizontalAlignment="Left"idth="179">
<i:Interaction.Behaviors>
<cls:WatermarkBehavior Watermark="请输入用户名" />
</i:Interaction.Behaviors>
</TextBox>