在twitter-bootstrap中有这么一个功能:
我们如何在WPF也实现类似这种写法:
<TextBox local:placeholder="请输入筛选条件..." />
首先熟悉一点WPF的人都知道,placeholder在这里是一个附加属性,而这个附加属性的类型是String。
第一种实现方式
首先我们想到的可能是这样:
public static string GetPlaceholder1(DependencyObject obj)
{
return (string)obj.GetValue(Placeholder1Property);
}
public static void SetPlaceholder1(DependencyObject obj, string value)
{
obj.SetValue(Placeholder1Property, value);
}
public static readonly DependencyProperty Placeholder1Property =
DependencyProperty.RegisterAttached("Placeholder1", typeof(string), typeof(TextBoxHelper),
new UIPropertyMetadata(string.Empty, new PropertyChangedCallback(OnPlaceholder1Changed)));
public static void OnPlaceholder1Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
TextBox txt = d as TextBox;
if (txt == null || e.NewValue.ToString().Trim().Length == 0) return;
RoutedEventHandler loadHandler = null;
loadHandler = (s1, e1) =>
{
txt.Loaded -= loadHandler;
if (txt.Text.Length == 0)
{
txt.Text = e.NewValue.ToString();
txt.FontStyle = FontStyles.Italic;
txt.Foreground = Brushes.Gray;
}
};
txt.Loaded += loadHandler;
txt.GotFocus += (s1, e1) =>
{
if (txt.Text &#