silverlight-带水印的TextBox

在Silverlight2里面,提供了TextBox的水印WaterMark功能。但是之后的版本就把这个功能给删了。关于Silverlight2里面的水印功能可以参考这篇文章《一步一步学Silverlight 2系列(2):基本控件》。之后想用水印唯有自己写一个了。

以下是我自己写的一个带水印的TextBox。

1.新建类MyTextBox,继承TextBox。

2.在MyTextBox类里面,增加一个属性WaterMarkText用来保存水印。

除了增加一个属性之外,还需要增加一些保存区别于正常状态的属性的全局变量。

//水印状态
private Brush _redColor = new SolidColorBrush(Colors.Red);
private double _halfOpacity = 0.5;

//正常状态
private Brush _userColor;
private double _userOpacity;

public string WaterMarkText { get; set; }

3.并且重写OnGotFocus()和OnLostFocus()两个事件。

在TextBox里面我们可以发现这两个事件是Override标记的,所以可以重载他们。

protected override void  OnGotFocus(RoutedEventArgs e)
{
    if (this.Text == WaterMarkText)
    {
        this.Text = "";
        this.Foreground = _userColor;
        this.Opacity = _userOpacity;
    }
    base.OnGotFocus(e);
}

protected override void OnLostFocus(RoutedEventArgs e)
{
    if (this.Text.Length < 1)
    {
        this.Text = WaterMarkText;
        this.Foreground = _redColor;
        this.Opacity = _halfOpacity;
    }
    base.OnLostFocus(e);
}

4.虽然这里已经完成大部分工作了,但是还有一个重要的地方。

类似于初始化,先验检测水印是否存在,而且设置水印。这个我将代码写在SizeChanged事件里面。为什么要写在这里可以参考另外一篇文章,关于控件的生命周期的《Silverlight 的控件生命周期 - 木野狐(Neil Chen)》。另外要将_userColor和_userOpacity初始化。

SizeChanged事件的代码如下:

public MyTextBox()
{
    SizeChanged += new SizeChangedEventHandler(MyTextBox_SizeChanged);
}

void MyTextBox_SizeChanged(object sender, SizeChangedEventArgs e)
{
    _userColor = this.Foreground;
    _userOpacity = this.Opacity;
    if (WaterMarkText != "")
    {
        this.Foreground = _redColor;
        this.Opacity = _halfOpacity;
        this.Text = WaterMarkText;
    }
}

 5.源代码,至此工作完成。以下是完整代码:

带水印的TextBox

 

6.调用过程

<local:MyTextBox Foreground="Blue" WaterMarkText="请输入!" />

local是命名空间,是MyTextBox类所在的命名空间。本机是这样写的:xmlns:local="clr-namespace:TextBoxWaterMark"

 

效果图如下:

未获取焦点:

获取焦点并输入

 

好记性不如烂笔头

 

时间: 2024-11-02 18:58:54

silverlight-带水印的TextBox的相关文章

Silverlight 代水印的查询文本框 Style

原文http://www.cnblogs.com/caodaiming/archive/2012/12/12/2815094.html   <TextBox x:Name="TextBoxFilter" Margin="6,0,6,0" HorizontalAlignment="Stretch" VerticalAlignment="Center" ToolTipService.ToolTip="Enter s

silverlight-带水印的自定义TextBox控件(版本2)

之前那个版本<silverlight-带水印的TextBox>不得不说是相当失败的,起码我是这样理解的.其实我一心想把这个给实现了,但是不得不承认自身技术上的缺陷.经过一番尝试和折腾,有了下面这个版本. 两个版本的区别: 其实是有本质的区别的. 之前那个版本只能设置"文本水印",相当有局限性.现在的版本是可以自定义水印内容的.譬如,可以为button,rectangle,ellipsed...    1.先新建一个"silverlight 模板化控件",

picplaypost怎么把视频中的水印去掉

  picplaypost和faceu.美拍大师等等软件一样,处理完的视频或者是照片都会自带水印,picplaypost的水印目前不支持去除这个功能,如果你想要去掉水印的话,就需要第三方软件的支持.

水印图片

问题描述 C#做水印图,pannel中放一个picturebox1,picturebox1放原图,在pannel中有滚动条拖动这个picturebox1,picturebox2放水印图,水印图的位置可以随意放置,现在可以生成带水印的图了,但是在拉动滚动条时,保存的图片,水印的位置有问题,请问拉动滚动条时,水印的位置要咋算,在线坐等大神指导....急急急.... 解决方案 解决方案二:你要分清楚你是获取到屏幕的坐标还是图片的坐标添加的水印.

asp.net上传图片并作处理水印与缩略图的实例代码_实用技巧

方法类: 复制代码 代码如下: upFileClass.cs using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlC

asp.net中读取本地带水印的图片不显示

问题描述 做了一个带有读取图片功能的东西,在客户那去调试,发现客户机器中带水印,然后,在程序中读水印图片都显示不出来.请问朋友们遇到过这种情况么,如果遇到过,问下解决了木有!!!现在这个问题很着急啊 解决方案 解决方案二:问题描述不明--别人读取带水印,估计是程序在显示的时候加上的水印,原图应该是没水印的解决方案三:或者你吧一个图上传上来看看解决方案四:我在描述下,客户的机器是带水印的机器,他里面的文档,图片等都是水印的.也就是说他原图就是带水印的图片.当初做这个东西的时候没考虑到水印问题.我这

JTextArea 图片水印实现代码

具体操作如下: 重写JViewport的paintComponent(Graphics g)方法.转Graphics为Graphics2D,使用setPaint(Paint paint)方法和fiilRect( )方法, 用TexturePaint填充JViewport,平铺水印(背景). /**   * @param args   * 通过JScrollPane和JViewport来使JTextArea拥有背景图片,可以通过TexturePaint的平铺来完成的,   * 要想实现背景,只需要

WPF TextBox和PasswordBox添加水印_C#教程

本文实例为大家分享TextBox和PasswordBox加水印的方法,供大家参考,具体内容如下 Textbox加水印 Textbox加水印,需要一个VisualBrush和触发器验证Text是否为空,在空的时候设置背景的Brush就可以实现水印效果. <TextBox Name="txtBoxName" Width="120" Height="23"> <TextBox.Resources> <VisualBrush

利用数据文件上的水印溯源

企业移动数据安全公司Bitglass近期做了一个实验:创建一个带水印的虚构数据文件来测试到底是什么人在翻阅这份文件.该文件最终12天里流转了22个国家,被查看1081次. 数字水印不能预防你的数据被盗,但能大幅缩短发现数据被盗的时间,比企业发现数据泄露平均耗时的7个月短多了. 追踪设备不是什么新鲜事物.汽车产业中,多数厂商都争相劝导车主在车内安装此类设备,承诺这些设备将在汽车万一被盗之时让警察知道该到哪儿找回汽车.司法实践中,缓刑期的罪犯有时候会被要求戴上一个有相同功能的脚环--告诉当局该罪犯的