用户名输入框:
1.没有获取焦点时, 如果输入内容为空,显示Mask文本:Please input username。如果不为空,显示文本内容。
2.获取焦点后, 如果是Mask文本,清除。如果不是,保留输入的内容。
这种例子很多,相信大家都熟悉。
public class MaskTextBox : TextBox { #region MaskText /// <summary> /// view sort style, desc arrow /// </summary> public static readonly DependencyProperty MaskTextProperty = DependencyProperty.Register( "MaskText" , typeof ( string ), typeof (MaskTextBox)); public string MaskText { get { return ( string )GetValue(MaskTextProperty); } set { SetValue(MaskTextProperty, value); } } #endregion public MaskTextBox() { Loaded += (sender, args) => { if ( string .IsNullOrEmpty( base .Text)) { base .Text = MaskText; base .Foreground = Brushes.Gray; } }; base .GotFocus += (sender, args) => { base .Foreground = Brushes.Black; if ( base .Text == MaskText) base .Text = string .Empty; }; base .LostFocus += (sender, args) => { if (! string .IsNullOrEmpty( base .Text)) return ; base .Text = MaskText; base .Foreground = Brushes.Gray; }; } public new string Text { get { if ( base .Text == MaskText) return string .Empty; else return base .Text; } set { base .Text = value; } } } |
调用很简单:
<local:MaskTextBox Width="200" Height="30" Margin="20,10,10,10" x:Name="tbUserName" MaskText="Please Input Username"/>
如果用触发器等等,实现起来很麻烦,做了一半做不下去了,所以这么干。
原文:http://www.cnblogs.com/xiaokang088/archive/2012/09/05/2672070.html