silverlight3取消了watertextbox控件,只有自己实现了个,实现了和textbox一样的无差异使用,只需要设置defaulttext就可以了

  1. using System;
  2. using System.Windows;
  3. using System.Windows.Controls;
  4. using System.Windows.Media;
  5.  
  6. namespace iLIS.Common.Controls
  7. {
  8. /// <summary>
  9. /// 自定义WatermarkedTextBox控件
  10. /// </summary>
  11. public class WatermarkedTextBox : TextBox
  12. {
  13. /// <summary>
  14. /// 水印文字
  15. /// </summary>
  16. public string DefaultText
  17. {
  18. get
  19. {
  20. return (string)GetValue(DefaultTextProperty);
  21. }
  22. set
  23. {
  24. SetValue(DefaultTextProperty, value);
  25. }
  26. }
  27. /// <summary>
  28. /// 文本框中的文字
  29. /// 文字为水印文字时返回空
  30. /// </summary>
  31. public string Text
  32. {
  33. get
  34. {
  35. if (base.Text == DefaultText)
  36. {
  37. return string.Empty;
  38. }
  39. else
  40. {
  41. return base.Text;
  42. }
  43. }
  44. set
  45. {
  46. base.Text = value;
  47. }
  48. }
  49. /// <summary>
  50. /// 获取或设置一个用于描述前景色的画笔。
  51. /// 用于绘制控件的前景的画笔。默认值为 System.Windows.Media.Colors.Black。
  52. /// </summary>
  53. public new Brush Foreground
  54. {
  55. get
  56. {
  57. return (Brush)GetValue(ForegroundProperty);
  58. }
  59. set
  60. {
  61. SetValue(ForegroundProperty, value);
  62. }
  63. }
  64.  
  65. // Using a DependencyProperty as the backing store for Foreground. This enables animation, styling, binding, etc...
  66. public static new readonly DependencyProperty ForegroundProperty =
  67. DependencyProperty.Register("Foreground", typeof(Brush), typeof(WatermarkedTextBox), new PropertyMetadata((o, e) =>
  68. {
  69. SolidColorBrush brush = e.NewValue as SolidColorBrush;
  70. if (brush != null && brush.Color != Colors.Gray)
  71. {
  72. (o as WatermarkedTextBox).oldBrush = brush;
  73. }
  74. }));
  75.  
  76. private Brush oldBrush = new SolidColorBrush(Colors.Black);
  77. /// <summary>
  78. /// 默认文本
  79. /// </summary>
  80. public static readonly DependencyProperty DefaultTextProperty =
  81. DependencyProperty.Register("DefaultText", typeof(string), typeof(WatermarkedTextBox), new PropertyMetadata(""));
  82. public event TextChangedEventHandler WatermarkedTextChanged;
  83. /// <summary>
  84. /// 初始化 System.Windows.Controls.TextBox 类的新实例。
  85. /// </summary>
  86. public WatermarkedTextBox()
  87. {
  88. base.TextChanged += new TextChangedEventHandler(OnWatermarkedTextBox_TextChanged);
  89. }
  90.  
  91. /// <summary>
  92. ///在派生类中重写后,每当应用程序代码或内部进程(如重新生成布局处理过程)调用 System.Windows.Controls.Control.ApplyTemplate(),都将调用此方法。
  93. ///简而言之,这意味着就在UI 元素在应用程序中显示前调用该方法。有关更多信息,请参见“备注”。
  94. /// </summary>
  95. public override void OnApplyTemplate()
  96. {
  97. this.Text = this.DefaultText;
  98. base.OnApplyTemplate();
  99. base.Foreground = new SolidColorBrush(Colors.Gray);
  100. }
  101. /// <summary>
  102. ///在 System.Windows.UIElement.GotFocus 事件发生之前调用。
  103. /// </summary>
  104. /// <param name="e">事件的数据</param>
  105. protected override void OnGotFocus(RoutedEventArgs e)
  106. {
  107. if (string.Equals(base.Text, this.DefaultText, StringComparison.OrdinalIgnoreCase))
  108. {
  109. base.Text = string.Empty;
  110. }
  111. base.OnGotFocus(e);
  112. }
  113. /// <summary>
  114. ///在 System.Windows.UIElement.LostFocus 事件发生之前调用。
  115. /// </summary>
  116. /// <param name="e">事件的数据</param>
  117. protected override void OnLostFocus(RoutedEventArgs e)
  118. {
  119. if (string.IsNullOrEmpty(base.Text))
  120. {
  121. base.Text = this.DefaultText;
  122. base.Foreground = new SolidColorBrush(Colors.Gray);
  123. }
  124. base.OnLostFocus(e);
  125. }
  126. /// <summary>
  127. /// 文本改变时调用
  128. /// </summary>
  129. /// <param name="sender"></param>
  130. /// <param name="e"></param>
  131. private void OnWatermarkedTextBox_TextChanged(object sender, TextChangedEventArgs e)
  132. {
  133. if (!string.Equals(base.Text, this.DefaultText, StringComparison.OrdinalIgnoreCase))
  134. {
  135. base.Foreground = oldBrush;
  136. if (this.WatermarkedTextChanged != null)
  137. {
  138. this.WatermarkedTextChanged(this, e);
  139. }
  140. }
  141. }
  142.  
  143. }
  144. }

silverlight WPF 水纹文本框的更多相关文章

  1. WPF 自定义文本框输入法 IME 跟随光标

    本文告诉大家在 WPF 写一个自定义的文本框,如何实现让输入法跟随光标 本文非小白向,本文适合想开发自定义的文本框,从底层开始开发的文本库的伙伴.在开始之前,期望了解了文本库开发的基础知识 本文实现的 ...

  2. WPF 之 文本框及密码框添加水印效果

    1.文本框添加水印效果 文本框水印相对简单,不需要重写模板,仅仅需要一个 VisualBrush 和触发器验证一下Text是否为空即可. <TextBox Name="txtSerac ...

  3. wpf中文本框只能输入整数

    private void txtBarCodeNum_KeyUp(object sender, KeyEventArgs e) { TxtInt(sender as TextBox); } priva ...

  4. [WPF]带下拉列表的文本框

    控件我已经弄好了,代码比较多,所以没办法全面介绍. 一开始我是直接继承Selector类来实现,做是做出来了,不过发现性能不太好.于是,我就想着自己来实现.毕竟我是做给自己用的,也不考虑过多的东西,也 ...

  5. Silverlight中文本框添加回车事件后,换行无法清除的解决方法

    在开发Silverlight的项目中,为了更好的用户体验,我们常要给一些控件添加一些快捷键.然而,在Silverlight中当用户回车提交后,光标停留在文本框的第二行怎么也清除不掉,经过一段时间研究, ...

  6. WPF 文本框添加水印效果

    有的时候我们需要为我们的WPF文本框TextBox控件添加一个显示水印的效果来增强用户体验,比如登陆的时候提示输入用户名,输入密码等情形.如下图所示: 这个时候我们除了可以修改TextBox控件的控件 ...

  7. WPF文本框密码框添加水印效果

    WPF文本框密码框添加水印效果 来源: 阅读:559 时间:2014-12-31 分享: 0 按照惯例,先看下效果 文本框水印 文本框水印相对简单,不需要重写模板,仅仅需要一个VisualBrush ...

  8. WPF编程:textbox控件文本框数据显示最后一行

    WPF编程:textbox控件文本框数据显示最后一行 TextBox控件在接收大量数据的时候,滚动条一般在最上方,如何使滚动条随着数据的接收而向下滚动呢?比如有一个TextBox'控件txbRecvD ...

  9. WPF里面制作圆角文本框

    转自:http://www.cnblogs.com/mengxin523/archive/2010/04/04/1704448.html 本以为WPF里面的XAML会很强大,可以设置很多属性,比如文本 ...

随机推荐

  1. cuda编程学习1——hello world!

    将c程序最简单的hello world用cuda编写在GPU上执行,以下为代码: #include<iostream>using namespace std;__global__ void ...

  2. mvalidator手机端校验

    官网地址:https://github.com/efri-yang/mobileValidate#%E5%8F%82%E6%95%B0 使用方法: html如下: <li class=" ...

  3. java Servlet接口及应用(转)

    基本类和接口 一.javax.servlet.Servlet接口 servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理 ...

  4. 每天学点Java小知识【1】

    一 Java标识符和关键字 1.标识符 作用:用来标识类名.变量名.方法名.类型名.数组名.文件名的有效字符序列. 组成规则:由字母.下划线.美元符号和数字组成,且第一个字符不能是数字字符.注意:标识 ...

  5. vue.js如何在标签属性中插入变量参数

    html的标签的属性,比如id.class.href需要动态传递参数,拼接字符串,查了一些资料,并没有找到合适的解决方法,琢磨了一上午,终于试出了方法: v-bind:属性=" '字符串'+ ...

  6. 老李分享:robotium3.6与4.0 later 的区别 2

    再仔细看了下4.0中的方法:  java.util.ArrayList<android.view.View> getCurrentViews()           Returns an ...

  7. 性能测试培训: 监控CPU之python

    性能测试培训: 监控CPU之python 作为一名测试开发工程师,开发脚本是为了测试服务的,我们在手里没有性能监控工具的情况下,我们会自己来进行开发脚本完成监控任务.下面是python监控cpu '' ...

  8. Java并发编程:线程的基本状态

    一.线程的基本状态 线程基本上有5种状态,分别是:NEW.Runnable.Running.Blocked.Dead. 1)新建状态(New) 当线程对象对创建后,即进入了新建状态,如:Thread ...

  9. R语言生成随机数

    1.概述 作为一种语言进行统计分析,R有一个随机数生成各种统计分布功能的综合性图书馆.R语言可以针对不同的分布,生成该分布下的随机数.其中,有许多常用的个分布可以直接调用.本文简单介绍生成常用分布随机 ...

  10. 由if-else,switch代替方案引起的思考

    关键词:条件判断,多态,策略模式,哈希表,字典map 笔者在用python实现事件驱动后,发现python是没有提供switch语句,python官方推荐多用字典来代替switch来实现,这让我就觉得 ...