在开发一个软件和网页的时候,都会有一个功能,那就是登陆功能,有了登陆那就一定需要用户输入账号和密码,我们在写登陆页面都会想到使用TextBoxPasswordBox去完成这两个功能,但是有一个问题,那就是如果你使用TextBox完成这个功能,那么要输入账号的前,用户要手动删除这句提示才可以输入账号,这样就特别麻烦不说,而且也不好看,也不方便,因此我在网上找了一些资料,可以把这两个提示话改为一个水印,这样既提示了用户这里是要干什么,也方便了不需要在输入前删掉提示的话,也保留了美观

TextBox文本框水印

这是我上面说的需要在输入前把提示删除,就会显得很麻烦

<Border Grid.Row="1" Grid.Column="1" BorderThickness="0,0,0,0.2" BorderBrush="#999"><WrapPanel Orientation="Horizontal" Margin="10" VerticalAlignment="Center"><Image Source="Images/Main8/Logins/6.png" Stretch="None"/><TextBox Name="txtAccount" BorderThickness="0" Width="200" Text="输入账号" Margin="20,0,0,0" FontSize="18" FontFamily="Microsoft YaHei" Foreground="#999" FontWeight="UltraLight"/></WrapPanel></Border>

在这里我们修改一下,不需要重写模板,只需要一个VisualBrush和触发器验证一下TextBox是否为空

<TextBox FontFamily="黑体" FontSize="18" FontWeight="UltraLight" BorderThickness="0,0,0,0.4" BorderBrush="#000"><!--设置文本资源--><TextBox.Resources><VisualBrush x:Key="Account" TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left"><VisualBrush.Visual><TextBlock Text="请输入账号"/></VisualBrush.Visual></VisualBrush></TextBox.Resources><!--设置文本提示样式--><TextBox.Style><Style TargetType="TextBox"><Style.Triggers><Trigger Property="Text" Value=""><Setter Property="Background" Value="{StaticResource Account}"/></Trigger></Style.Triggers></Style></TextBox.Style></TextBox>

PasswordBox密码框水印

密码框的水印不同于文本框,需要重新写一个类去判断

public class PasswordBoxMonitor : DependencyObject{public static bool GetIsMonitoring(DependencyObject obj){return (bool)obj.GetValue(IsMonitoringProperty);}public static void SetIsMonitoring(DependencyObject obj, bool value){obj.SetValue(IsMonitoringProperty, value);}public static readonly DependencyProperty IsMonitoringProperty = DependencyProperty.RegisterAttached("IsMonitoring", typeof(bool), typeof(PasswordBoxMonitor), new UIPropertyMetadata(false, OnIsMonitoringChanged));public static int GetPasswordLength(DependencyObject obj){return (int)obj.GetValue(PasswordLengthProperty);}public static void SetPasswordLength(DependencyObject obj, int value){obj.SetValue(PasswordLengthProperty, value);}public static readonly DependencyProperty PasswordLengthProperty = DependencyProperty.RegisterAttached("PasswordLength", typeof(int), typeof(PasswordBoxMonitor), new UIPropertyMetadata(0));public static void OnIsMonitoringChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){var pb = d as PasswordBox;if (pb == null){return;}if ((bool)e.NewValue){pb.PasswordChanged += PasswordChanged;}else{pb.PasswordChanged -= PasswordChanged;}}public static void PasswordChanged(object sender, RoutedEventArgs e){var pb = sender as PasswordBox;if (pb == null){return;}//加Password.Length用于判断密码框长度是否为0,为0则显示水印,否则隐藏SetPasswordLength(pb, pb.Password.Length);}}

需要用到带水印的密码框的时候就引用一下类的即可

<PasswordBox Name="pb" VerticalAlignment="Bottom" Width="265" Height="30"><PasswordBox.Style><Style TargetType="PasswordBox"><Setter Property="HorizontalAlignment" Value="Left"></Setter><Setter Property="VerticalAlignment" Value="Top"></Setter><Setter Property="local:PasswordBoxMonitor.IsMonitoring"  Value="True"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type PasswordBox}"><Border Name="Bd"  Background="{TemplateBinding Background}"  BorderThickness="0,0,0,0.4" BorderBrush="Black"  SnapsToDevicePixels="true"><Grid><ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/><StackPanel Orientation="Horizontal" Visibility="Collapsed" Name="myStackPanel"><TextBlock HorizontalAlignment="Left" VerticalAlignment="Center" Foreground="#999" Text="请输入密码" FontSize="18"/></StackPanel></Grid></Border><ControlTemplate.Triggers><Trigger Property="IsEnabled" Value="false"><Setter Property="Visibility" TargetName="myStackPanel" Value="Collapsed"/></Trigger><Trigger Property="local:PasswordBoxMonitor.PasswordLength" Value="0"><Setter Property="Visibility" TargetName="myStackPanel" Value="Visible"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style></PasswordBox.Style></PasswordBox>

在写这个的时候我遇到一个问题,写出来可能会看大家有没有遇到这个问题也遇到了可以参考一下我的

我写完的时候发现我的类发地方了,然后把类移到正确的地方,然后就出现了上面这个问题,一直报错,运行不了,然后我检查了一些发现之前的那个类没有删干净,把之前那个地方的类删干净则可以了。要是大家遇到的问题跟我的一样,可以试试我的方法

当然,也不只有我这一个方法,大家可以在网上搜索一些其他的方法,或者大家知道另外的方法,也可以留言

TextBox文本框与PasswordBox密码框水印相关推荐

  1. WPF 给文本框TextBlock以及密码框PassWord加背景水印实现用户登录提示

    WPF 给文本框TextBlock以及密码框PassWord加背景水印实现用户登录提示 最近在学WPF写一个登录界面,遇到了一个给文本框和密码框加水印的问题,部分解决方案与网上的有所不同.直接来效果: ...

  2. 本节作业之显示不同问候语、显示密码、关闭二维码、循环精灵图背景、显示隐藏文本框内容、密码框格式提示错误、京东关闭广告、新浪下拉菜单、开关灯、换肤、表格隔行变色、表单取消全选、tab栏切换、发布删除留言

    本节作业之显示不同问候语.显示密码.关闭二维码.循环精灵图背景.显示隐藏文本框内容.密码框格式提示错误.京东关闭广告.新浪下拉菜单.开关灯.换肤.表格隔行变色.表单取消全选.tab栏切换.发布删除留言 ...

  3. html密码框不显示,密码框中密码的显示与隐藏切换(JS)

    目标: 点击小眼睛后, 1.密码框变成文本框: 2.小眼睛图片由闭眼变成睁眼: 3.再次点击后,又变成闭眼+密码框 要想实现3,方法1: 则需要一个变量,来辅助判断当前input的属性,如果flag为 ...

  4. C#窗体中的textBox怎么设置为密码框

    场景 在用C#做登录的窗体时,需要将TextBox设置为密码框. 一般会找到TextBox然后设置其属性. 但是属性里面没有直接的设置TextBox类型的属性. 实现 在行为--PasswordCha ...

  5. 创建输入控件(input控件、文本框、密码框、单项选择、多项选择、重置与提交按钮的设置)

    创建输入控件 input控件的相关概念 input控件的属性 input控件的类型 文本框的设置 密码框的设置 单项选择的设置 多项选择的设置 重置与提交按钮的设置 综合运用 相关概念选择题及参考答案 ...

  6. JS实现密码框小眼睛的显示与隐藏(使用字体图标)

    JS实现密码框小眼睛的显示与隐藏(使用字体图标) 前端学习路上的小练习,如若不喜,请勿喷. 眼睛使用的是 iconfont 阿里矢量图标库的内容 链接:https://www.iconfont.cn/ ...

  7. 矛与盾:用VB打造驱动级键盘记录器,能过QQ密码框(源码)

    信息监控与隐私保护永远是一对矛盾,在对付各种信息窃取软件上,新技术总是层出不穷.本文介绍一种古老的键盘记录器技术,确实很古老,DOS时代人们就在用了,但是现在它仍然很有效,在键盘过滤驱动失效的情况下, ...

  8. WPF清空textbox文本框

    1. 第一步:将每个窗体当中的网格布局控件--Grid命名 2. 3. 4. 5. 第二步:在UI层,添加清空的类,以及判空的类 6. 7. 第三步:在两个类里面添加命名空间 8. 9. 这两个引用是 ...

  9. WinForm -- 为TextBox文本框添加鼠标右键菜单

    WinForm -- 为TextBox文本框添加鼠标右键菜单 1. 新建一个WinForm项目,放置一个TextBox控件 2. 从工具箱拖进来一个ContextMenuStrip 3. 将TextB ...

最新文章

  1. auto自动类型推断
  2. 0403互联网新闻 | 哔哩哔哩上线电商类小程序;翼鸥教育和腾讯云联合发布ClassIn Cloud...
  3. leetcode(3)——697. 数组的度(C++版本注释)(map容器),448. 找到所有数组中消失的数字(取余操作,C++中的auto类型)
  4. springboot集成测试时@RunWith和@SpringBootTest爆红不能测试
  5. Kafka官方文档翻译——实现
  6. 卷积为什么如此强大?理解深度学习中的卷积
  7. 常用SHELL软件命令
  8. mybitis SQL insert into 多条数据
  9. 火狐(firefox)使用Tilt插件实现3D视图查看网页+解决安装tilt.xpi插件安装失败问题
  10. ipad学计算机二级,‎App Store 上的“计算机等级考试一级最新题库”
  11. word流程图变为图片格式_word2007转成图片格式的两种方法
  12. 6月书讯 | 初夏,正好读新书
  13. 使用KMS激活软件导致浏览器呗篡改解决办法
  14. matlab根据y标注x,知道y的值,怎么标注出对应x值所对应曲线的坐标啊;matlab
  15. 微信小程序生成图片分享朋友圈
  16. SAP-MM知识精解-常见报表汇总(01)
  17. 洛谷 P1426 小鱼会有危险吗
  18. Linux命令-按照与使用(15)终端登陆前欢迎界面设置
  19. 半加器与全加器的实现
  20. 扑克牌顺子java_算法练习篇之:扑克牌顺子

热门文章

  1. 为何腾讯和阿里用LoRa,运营商用NB-loT?
  2. C++中string转int
  3. try catch 嵌套
  4. 未知数数量大于方程数量,如何求解,附Python 代码
  5. 嵌入式培训学校怎么选?嵌入式学习还有就业优势吗?
  6. .net core mvc初级教程(一)
  7. 机器人自主行走难题如何解决?
  8. C++面向对象编程 -- 继承、多态和文件操作
  9. “机房环境监控系统”机房安全最重要的一环!
  10. linux时间校对工具adjtimex