silverlight3取消了watertextbox控件,只有自己实现了个,实现了和textbox一样的无差异使用,只需要设置defaulttext就可以了
代码语言:javascript复制 1 using System;
2 using System.Windows;
3 using System.Windows.Controls;
4 using System.Windows.Media;
5
6 namespace iLIS.Common.Controls
7 {
8 /// <summary>
9 /// 自定义WatermarkedTextBox控件
10 /// </summary>
11 public class WatermarkedTextBox : TextBox
12 {
13 /// <summary>
14 /// 水印文字
15 /// </summary>
16 public string DefaultText
17 {
18 get
19 {
20 return (string)GetValue(DefaultTextProperty);
21 }
22 set
23 {
24 SetValue(DefaultTextProperty, value);
25 }
26 }
27 /// <summary>
28 /// 文本框中的文字
29 /// 文字为水印文字时返回空
30 /// </summary>
31 public string Text
32 {
33 get
34 {
35 if (base.Text == DefaultText)
36 {
37 return string.Empty;
38 }
39 else
40 {
41 return base.Text;
42 }
43 }
44 set
45 {
46 base.Text = value;
47 }
48 }
49 /// <summary>
50 /// 获取或设置一个用于描述前景色的画笔。
51 /// 用于绘制控件的前景的画笔。默认值为 System.Windows.Media.Colors.Black。
52 /// </summary>
53 public new Brush Foreground
54 {
55 get
56 {
57 return (Brush)GetValue(ForegroundProperty);
58 }
59 set
60 {
61 SetValue(ForegroundProperty, value);
62 }
63 }
64
65 // Using a DependencyProperty as the backing store for Foreground. This enables animation, styling, binding, etc...
66 public static new readonly DependencyProperty ForegroundProperty =
67 DependencyProperty.Register("Foreground", typeof(Brush), typeof(WatermarkedTextBox), new PropertyMetadata((o, e) =>
68 {
69 SolidColorBrush brush = e.NewValue as SolidColorBrush;
70 if (brush != null && brush.Color != Colors.Gray)
71 {
72 (o as WatermarkedTextBox).oldBrush = brush;
73 }
74 }));
75
76 private Brush oldBrush = new SolidColorBrush(Colors.Black);
77 /// <summary>
78 /// 默认文本
79 /// </summary>
80 public static readonly DependencyProperty DefaultTextProperty =
81 DependencyProperty.Register("DefaultText", typeof(string), typeof(WatermarkedTextBox), new PropertyMetadata(""));
82 public event TextChangedEventHandler WatermarkedTextChanged;
83 /// <summary>
84 /// 初始化 System.Windows.Controls.TextBox 类的新实例。
85 /// </summary>
86 public WatermarkedTextBox()
87 {
88 base.TextChanged = new TextChangedEventHandler(OnWatermarkedTextBox_TextChanged);
89 }
90
91 /// <summary>
92 ///在派生类中重写后,每当应用程序代码或内部进程(如重新生成布局处理过程)调用 System.Windows.Controls.Control.ApplyTemplate(),都将调用此方法。
93 ///简而言之,这意味着就在UI 元素在应用程序中显示前调用该方法。有关更多信息,请参见“备注”。
94 /// </summary>
95 public override void OnApplyTemplate()
96 {
97 this.Text = this.DefaultText;
98 base.OnApplyTemplate();
99 base.Foreground = new SolidColorBrush(Colors.Gray);
100 }
101 /// <summary>
102 ///在 System.Windows.UIElement.GotFocus 事件发生之前调用。
103 /// </summary>
104 /// <param name="e">事件的数据</param>
105 protected override void OnGotFocus(RoutedEventArgs e)
106 {
107 if (string.Equals(base.Text, this.DefaultText, StringComparison.OrdinalIgnoreCase))
108 {
109 base.Text = string.Empty;
110 }
111 base.OnGotFocus(e);
112 }
113 /// <summary>
114 ///在 System.Windows.UIElement.LostFocus 事件发生之前调用。
115 /// </summary>
116 /// <param name="e">事件的数据</param>
117 protected override void OnLostFocus(RoutedEventArgs e)
118 {
119 if (string.IsNullOrEmpty(base.Text))
120 {
121 base.Text = this.DefaultText;
122 base.Foreground = new SolidColorBrush(Colors.Gray);
123 }
124 base.OnLostFocus(e);
125 }
126 /// <summary>
127 /// 文本改变时调用
128 /// </summary>
129 /// <param name="sender"></param>
130 /// <param name="e"></param>
131 private void OnWatermarkedTextBox_TextChanged(object sender, TextChangedEventArgs e)
132 {
133 if (!string.Equals(base.Text, this.DefaultText, StringComparison.OrdinalIgnoreCase))
134 {
135 base.Foreground = oldBrush;
136 if (this.WatermarkedTextChanged != null)
137 {
138 this.WatermarkedTextChanged(this, e);
139 }
140 }
141 }
142
143 }
144 }