在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 &#

本文详细介绍了在WPF中实现TextBox占位符的多种方法,包括使用装饰器的方式,分析了每种方法的优缺点。通过示例代码和问题探讨,展示了如何解决在TextBox隐藏时装饰器仍存在的问题,以及对不同实现方式的考量。
最低0.47元/天 解锁文章
5万+

被折叠的 条评论
为什么被折叠?



