博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
silverlight-带水印的TextBox
阅读量:5829 次
发布时间:2019-06-18

本文共 1650 字,大约阅读时间需要 5 分钟。

在Silverlight2里面,提供了TextBox的水印WaterMark功能。但是之后的版本就把这个功能给删了。关于Silverlight2里面的水印功能可以参考这篇文章《》。之后想用水印唯有自己写一个了。

以下是我自己写的一个带水印的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事件里面。为什么要写在这里可以参考另外一篇文章,关于控件的生命周期的《》。另外要将_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类所在的命名空间。本机是这样写的:xmlns:local="clr-namespace:TextBoxWaterMark"

 

效果图如下:

未获取焦点:

获取焦点并输入

 

好记性不如烂笔头

 

转载地址:http://pildx.baihongyu.com/

你可能感兴趣的文章
Linux基础命令---rmdir
查看>>
Squid 反向代理服务器配置
查看>>
Java I/O操作
查看>>
Tomcat性能调优
查看>>
Android自学--一篇文章基本掌握所有的常用View组件
查看>>
灰度图像和彩色图像
查看>>
FreeMarker-Built-ins for strings
查看>>
argparse - 命令行选项与参数解析(转)
查看>>
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
我理想中的前端工作流
查看>>
Chrome 广告屏蔽功能不影响浏览器性能
查看>>
Android状态栏实现沉浸式模式
查看>>
使用Openfiler搭建ISCSI网络存储
查看>>
zabbix监控php状态(四)
查看>>
实战Django:小型CMS Part2
查看>>
原创]windows server 2012 AD架构试验系列 – 16更改DC计算机名
查看>>
统治世界的十大算法
查看>>
SSH中调用另一action的方法(chain,redirect)
查看>>
数据库基础
查看>>
表格排序
查看>>