.net – 如何在Silverlight 4中使用TextBox.Watermark?

.net – 如何在Silverlight 4中使用TextBox.Watermark?,第1张

概述在浏览MSDN文档时,您可能会遇到这样的gem:TextBox.Watermark. “太棒了!我一直想要一种内置的方法在我的文本框上做水印!这很棒,让我继续在XAML中设置它!” <TextBox Watermark="This is my watermark" Margin="20"></TextBox> 不幸的是,如果你运行它,你将得不到你所期望的: 细节: 这是什么?好吧,仔细查看MSDN 在浏览MSDN文档时,您可能会遇到这样的gem:TextBox.Watermark.

“太棒了!我一直想要一种内置的方法在我的文本框上做水印!这很棒,让我继续在XAML中设置它!”

<TextBox Watermark="This is my watermark" margin="20"></TextBox>

不幸的是,如果你运行它,你将得不到你所期望的:

细节:

这是什么?好吧,仔细查看MSDN文档:

那就对了.它在Silverlight 4中得到支持,但它也说“不要在Silverlight 4应用程序中使用”.如果您确实使用它,则会收到System.NotImplemented异常.要验证,这是通过Reflector反编译的属性的代码:

[Editorbrowsable(EditorbrowsableState.Never)]public object Watermark{get{StubHelper.ThrowIfnotinDesignmode();return base.GetValue(WatermarkProperty);}set{StubHelper.ThrowIfnotinDesignmode();base.SetValue(WatermarkProperty,value);}}

它就是 – 它在任何时候都没有处于设计模式时抛出异常.这没有道理吗?为什么微软会这样做?

不幸的是我还没有找到任何确定的答案,但是如果我不得不猜测是因为微软计划在未来的版本(也许是v5)中在TextBox控件上实现Watermark行为,并希望有效地保留这个属性,以便第三方控制创建者不会将TextBox子类化并创建自己的Watermark属性.
我知道至少有一个控件供应商ComponentOne,它拥有一个继承自TextBox并提供Watermark属性的控件.
对我来说,似乎这是微软阻止人们在他们自己的TextBox子类上使用这个属性名称的方式.

解决方法 创建一个类库项目.添加类文件使用以下代码…..之后添加在此项目中的dll.

public class WatermarkTextBox : TextBox {     private bool displayWatermark = true;     private bool hasFocus = false;      public WatermarkTextBox()     {         this.GotFocus += new RoutedEventHandler(WatermarkTextBox_GotFocus);         this.LostFocus += new RoutedEventHandler(WatermarkTextBox_LostFocus);         this.TextChanged += new TextChangedEventHandler(WatermarkTextBox_TextChanged);         this.Unloaded += new RoutedEventHandler(WatermarkTextBox_Unloaded);     }     private voID WatermarkTextBox_TextChanged(object sender,TextChangedEventArgs e)     {         if (!hasFocus && Text == "")         {             setMode(true);             displayWatermark = true;             this.Text = Watermark;         }     }     private voID WatermarkTextBox_Unloaded(object sender,RoutedEventArgs e)     {         this.GotFocus -= WatermarkTextBox_GotFocus;         this.LostFocus -= WatermarkTextBox_LostFocus;         this.Unloaded -= WatermarkTextBox_Unloaded;         this.TextChanged -= WatermarkTextBox_TextChanged;     }     private voID WatermarkTextBox_GotFocus(object sender,RoutedEventArgs e)     {         hasFocus = true;         if (displayWatermark)         {             setMode(false);             this.Text = "";         }     }     private voID WatermarkTextBox_LostFocus(object sender,RoutedEventArgs e)     {         hasFocus = false;         if (this.Text == "")         {             displayWatermark = true;             setMode(true);             this.Text = Watermark;         }         else         {             displayWatermark = false;         }     }     private voID setMode(bool watermarkStyle)     {         if (watermarkStyle)         {             this.FontStyle = FontStyles.Italic;             this.Foreground = new SolIDcolorBrush(colors.Gray);         }         else         {             this.FontStyle = FontStyles.normal;             this.Foreground = new SolIDcolorBrush(colors.Black);         }     }     public new string Watermark     {         get { return GetValue(WatermarkProperty) as string; }         set { SetValue(WatermarkProperty,value); }     }     public static new Readonly DependencyProperty WatermarkProperty =         DependencyProperty.Register("Watermark",typeof(string),typeof(WatermarkTextBox),new PropertyMetadata(watermarkPropertyChanged));     private static voID watermarkPropertyChanged(DependencyObject obj,DependencyPropertyChangedEventArgs e)     {         WatermarkTextBox textBox = obj as WatermarkTextBox;         if (textBox.displayWatermark)         {             textBox.Text = e.NewValue.ToString();             textBox.setMode(true);         }     }

XAML:

xmlns:watertext="clr-namespace:SilverlightClasslibrary1;assembly=SilverlightClasslibrary1"    <watertext:WatermarkTextBox Watermark="WElcome" margin="150,115,120,166"></watertext:WatermarkTextBox>
总结

以上是内存溢出为你收集整理的.net – 如何在Silverlight 4中使用TextBox.Watermark?全部内容,希望文章能够帮你解决.net – 如何在Silverlight 4中使用TextBox.Watermark?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1078863.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存