很多时候我们都希望通过水印来告诉用户这里该填什么样格式的数据,那么我们就希望有这样的一个控件。

  为了方便起见,先定义一个依赖属性专门来存放水印中显示的字符串。

public sealed class TextBoxWithMark : TextBox
{
public static readonly DependencyProperty WaterMarksProperty = DependencyProperty.Register(
"WaterMarks", typeof(string), typeof(TextBoxWithMark), new PropertyMetadata(default(string))); public string WaterMarks
{
get
{
return (string)GetValue(WaterMarksProperty);
}
set
{
SetValue(WaterMarksProperty, value);
}
} }

  在引用中引用当前的命名空间

xmlns:local="clr-namespace:Example"

  引入转换器

<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>

  现在的预想是当用户输入字符时水印消失,字串为空时水印出现,可以用事件来做,但是显然不太合适,因此我们考虑用触发器来做,可以减少很多不必要的代码逻辑。

  实现control template 

<ControlTemplate x:Key="WaterMarkBox" TargetType="local:TextBoxWithMark">
<Grid Margin="">
<Label VerticalAlignment="Center" Margin="2,0,0,0" Content="{TemplateBinding WaterMarks}" Foreground="Gray" FontStyle="Italic" Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Text.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}, UpdateSourceTrigger=PropertyChanged}">
</Label>
<TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Background="Transparent" VerticalContentAlignment="Center"/>
</Grid>
</ControlTemplate>

  如果Text是空的则隐藏掉label,UpdateSourceTrigger=PropertyChanged这个很重要,否则要丢失焦点才引发事件不符合我们的需求。

  现在在其他地方可以很方便的来使用这个控件

<local:TextBoxWithMark x:Name="TbCc" WaterMarks="input hint" Template="{StaticResource WaterMarkBox}"/>

WPF中带水印的Textbox的更多相关文章

  1. WPF 实现带标题的TextBox

    这篇博客将分享在WPF中如何创建一个带Title的TextBox.首先请看一下最终的效果, 实现思路:使用TextBlock+TextBox来实现,TextBlock用来显示Title. 实现代码, ...

  2. WPF中Popup上的textbox无法切换到中文输入法

    As Marco Zhou has said in the msdn forum (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b ...

  3. 自定义控件之带水印的Textbox

    代码地址: http://download.csdn.net/detail/u010312811/9553195 Windows消息处理: http://www.cnblogs.com/imstriv ...

  4. wpf中的倒影效果实现

    原文:wpf中的倒影效果实现        <TextBox Name="txt"                      FontSize="30" ...

  5. WPF 带水印的密码输入框实现

    原文:WPF 带水印的密码输入框实现 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/835055 ...

  6. WPF 带水印的密码输入框

    原文:WPF 带水印的密码输入框 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83652540 ...

  7. WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展

    一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本 ...

  8. 【转】WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展

    一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要是对文本输入控件进行样式开发,及相关扩展功能开发,主要内容包括: 基本文 ...

  9. 带清空按钮TextBox的实现(WPF)

    本博文针对人群:WPF新手.博文内容:通过Style制定包含清空Button的TextBox样式模板,通过在Style中引入自定义类的附加属性完成对TextBox的内容清空. <span sty ...

随机推荐

  1. spring注解读取json文件

    开发时候在接口没有提供的时候,可以用json文件提前模拟接口数据 1.service层 package com.syp.spring.service; import java.io.File; imp ...

  2. WinForm界面布局

    一直很羡慕和佩服园子中伍华聪的界面设计和布局.好多年都没有真正写过C/S项目了,今天翻出来6年前刚开始学习WinForm的时候写的一个简单的HR管理系统,思绪一下子很复杂,记得是6年前的夏天,天气很热 ...

  3. Installing MySQL on Microsoft Windows Using a noinstall Zip Archive

    这两天在自己的windows上安装了一下mySql数据库,安装使用的是5.7.18版本的 noinstall Zip Archive安装包mysql-5.7.18-win32.zip.由于5.7版本相 ...

  4. DIV+CSS 规范命名集合

    一: 命名规范说明: 1).所有的命名最好都小写 2).属性的值一定要用双引号("")括起来,且一定要有值如class="divcss5",id="d ...

  5. pdf.js实现在HTML下直接浏览pdf文档,无需插件即可实现

    近期,有一个朋友做B端,服务器存了大量的金融类数据,很多都是pdf文档,他现在的做法是,先将pdf文档转换成flash,再放到浏览器上给用户浏览,但是他告诉我,这种体验太差了,而且很好资源,空间已经快 ...

  6. Python实现脚本锁功能,同时只能执行一个脚本

    1. 文件锁 脚本启动前检查特定文件是否存在,不存在就启动并新建文件,脚本结束后删掉特定文件. 通过文件的判断来确定脚本是否正在执行. 方法实现也比较简单,这里以python脚本为例 #coding= ...

  7. Java学习笔记——设计模式之一.简单工厂

    蜀道之难.难于上青天,侧身西望长咨嗟 --蜀道难 设计模式第一篇,简单工厂. 定义Operation类 package cn.no1.simplefactory; public abstract cl ...

  8. C语言解析17monipdb.dat(http://www.ipip.net/)免费数据库

    官方给的链接打不开,而且里面的逻辑,每次都会打开文件,所以自己做了点个修改,发上来,借大家参考: #include <stdio.h> #include <stdlib.h> ...

  9. ng-option

    select 是 AngularJS 预设的一组directive.下面是其官网api doc给出的用法:AngularJS:select 大意是,select中的ngOption可以采用和ngRep ...

  10. 华为路由器AR1220F-S的端口映射NAT配置(拨号光纤上网)

    telnet 登录 或者ssh登录路由器 //进入系统试图界面 sys-view //第一步. 添加acl规则, 允许内网本身访问对外的公网ip. 否则,只能外部人员访问你的公网ip [Huawei] ...