TextBox文本框与PasswordBox密码框水印

news/2024/5/3 1:07:29/文章来源:https://blog.csdn.net/weixin_49756484/article/details/128092301

在开发一个软件和网页的时候,都会有一个功能,那就是登陆功能,有了登陆那就一定需要用户输入账号和密码,我们在写登陆页面都会想到使用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>

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_227333.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm opencv无法自动补全

我的环境 python 3.6.9opencv-python 4.4.0.42opencv-contrib-python 4.6.66ubuntu 18.04 LTSpycharm 2020.3.2 解决方案 首先找到cv2的site-packagespip3 show opencv-python进入到该目录, 复制so结尾文件至上级目录: cp cv2.cpython-36m-x86_64-linux-gnu.so ../等待pych…

R语言用ARIMA模型滑动时间窗口识别网络流量时间序列异常值

全文链接&#xff1a;http://tecdat.cn/?p30597最近我们被要求解决时间序列异常检验的问题。有客户在使用大量的时间序列。这些时间序列基本上是每10分钟进行一次的网络测量&#xff0c;其中一些是周期性的&#xff08;即带宽&#xff09;&#xff0c;而另一些则不是&#xff…

微信开发者工具C盘占用大的问题

将User Data 下的文件迁移到其他盘&#xff0c;比如 D盘&#xff0c;E盘&#xff0c;F盘 步骤如下&#xff1a; 1.找到微信开发者工具C盘所在的缓存目录&#xff0c;一般为 C:\Users\ 你的用户名\AppData\Local\微信开发者工具\User Data 将里面的内容全部剪切到其它盘符&…

使用Psycopg2连接openGauss

文章目录1.简介2.接口介绍开发流程接口说明3.使用3.1环境准备3.2下载并加载python驱动3.3创建数据库连接用户3.4示例4.常见报错1.简介 Psycopg是一种用于执行SQL语句的PythonAPI&#xff0c;可以为PostgreSQL、openGauss数据库提供统一访问接口&#xff0c;应用程序可基于它进…

嘉创房地产冲刺港交所:半年营收4.7亿 现金及现金等价物减少

雷递网 雷建平 11月28日嘉创房地产控股有限公司&#xff08;简称&#xff1a;“嘉创”&#xff09;日前递交招股书&#xff0c;准备在港交所上市。半年营收4.73亿嘉创为一家精品住宅物业发展商&#xff0c;主要在大湾区的东莞、惠州及佛山迅速发展的住宅市场&#xff08;如东莞…

干货 | 数字经济创新创业——如何发展绿色经济

下文整理自清华大学大数据能力提升项目能力提升模块课程“Innovation & Entrepreneurship for Digital Economy”&#xff08;数字经济创新创业课程)的精彩内容。主讲嘉宾&#xff1a;Kris Singh: CEO at SRII, Palo Alto, CaliforniaVisiting Professor of Tsinghua Unive…

下沉市场投资热度提升 7天酒店打造酒店投资“极致性价比”

近日&#xff0c;7天酒店 “总裁面对面”酒店投资云沙龙活动举办&#xff0c;通过微信、抖音双平台联合直播&#xff0c;多维度探讨酒店行业的“新蓝海”机遇以及下沉市场的投资模式&#xff0c;助力更多投资人把握新的市场红利。 经济型酒店拥抱“新蓝海” 下沉市场投资热度提…

Antd中Table列表行默认包含修改及删除功能的封装

一、前言 ant-design是非常不错、方便的一款前端组件库&#xff0c;而这次用到的ProComponents则是在 Ant Design 上进行了自己的封装&#xff0c;更加易用&#xff0c;与 Ant Design 设计体系一脉相承&#xff0c;无缝对接 antd 项目&#xff0c;样式风格与 antd 一脉相承&am…

SAP 财务月结之 外币评估(TCODE:FAGL_FC_VAL,S4版本用 FAGL_FCV)<转载>

原文链接&#xff1a;https://zhuanlan.zhihu.com/p/367876296 在会计期末&#xff0c;企业往往会有以外币记的余额&#xff0c;如应付账款&#xff08;国外&#xff09;、应收账款&#xff08;国外&#xff09;&#xff0c;或外币存款。而企业出具的财务报表&#xff0c;货币必…

学习笔记11月27日

Infant Brain Deformable Registration Using Global and Local Label-Driven Deep Regression Learning 文章来源&#xff1a;谷歌学术 一、摘要 婴儿大脑磁共振&#xff08;MR&#xff09;图像的可变形配准具有挑战性&#xff0c;因为&#xff1a;(1)这些纵向图像存在较大的…

RK3588平台开发系列讲解(USB篇)USB 外设 CONFIG

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、 Mass Storage Class CONFIG二、USB Serial Converter CONFIG三、USB HID CONFIG四、USB Net CONFIG五、USB Camera CONFIG六、USB Audio CONFIG七、 USB HUB CONFIG沉淀、分享、成长,让自己和他人都能有所收获!…

Java并发-多线程售票案例

1. 前言 本节内容主要是使用 Java 的使用 Condition 和 Lock 机制对多线程售票案例进行实现。售票案例多数情况下主要关注多线程如何安全的减少库存&#xff0c;也就是剩余的票数&#xff0c;当票数为 0 时&#xff0c;停止减少库存。 2. 售票机制模型 如下图所示&#xff0…

ANR系列之ContentProvider类型原理讲解

前言&#xff1a; 众所周知&#xff0c;ANR一共有四种类型&#xff0c;如下&#xff1a; 1.输入事件类型ANR 2.广播类型ANR 3.ContentProvider类型ANR 4.Service类型ANR 四种类型的超时时间如下所示&#xff1a; 所以ANR系列文章也会分为5篇文章来进行讲解&#xff0c;本…

管理最忌讳用权管人

阅读本文大概需要 1.66 分钟。最近星球在更新一些系列课程&#xff0c;其中有一节课叫「怎样从技术人转型管理者&#xff1f;」应该很适合大多读者&#xff0c;毕竟关注我的读者里&#xff0c;做技术做管理的居多&#xff0c;所以这篇也发这里给大家分享下。程序员做技术的&…

WebView2 通过 PuppeteerSharp 实现爬取 王者 壁纸 (案例版)

王者壁纸自动化获取逻辑分析 其实它的逻辑很简单&#xff0c; 就是王者的官网&#xff0c;打开后&#xff0c;在右下角就看到了皮肤页面部分。 这个时候&#xff0c;点击更多&#xff0c;就会打开全部英雄详情的页面。 这个时候&#xff0c;单点任意一个英雄&#xff0c;就会…

Rust机器学习之Linfa

Rust机器学习之Linfa 众所周知&#xff0c;Python之所以能成为机器学习的首选语言&#xff0c;与其丰富易用的库有很大关系。某种程度上可以说是诸如numpy、pandas、scikit-learn、matplotlib、pytorch、networks…等一系列科学计算和机器学习库成就了Python今天编程语言霸主的…

DDOS防护如何建设?

数字化转型发展也推动了云计算、人工智能、大数据、物联网等新一代信息技术应用普及&#xff0c;与此同时&#xff0c;新时代的发展也带来了新的网络威胁和新的安全需求。我们不难发现&#xff0c;近年网络攻击时间层出不穷&#xff0c;全球范围来看&#xff0c;企业因遭受网络…

CrossOver软件2022可以使苹果MAC电脑运行Windows软件应用

面对安装双系统时的繁琐步骤&#xff0c;以及虚拟机软件那庞大的体积&#xff0c;CrossOver的出现&#xff0c;让一切都变得简单起来。 CrossOver自带的一系列的Windows应用&#xff0c;涵盖游戏软件、办公软件、设计软件等多个种类。它轻巧的体积&#xff0c;便捷的操作步骤无…

国鸿氢能冲刺港股:年亏损7亿 云浮工业园与青岛城投是股东

雷递网 雷建平 11月28日国鸿氢能科技&#xff08;嘉兴&#xff09;股份有限公司&#xff08;简称&#xff1a;“国鸿氢能”&#xff09;日前递交招股书&#xff0c;准备在港交所上市。年亏损7亿国鸿氢能成立于2015年6月&#xff0c;是一家以氢燃料电池为核心产品的企业&#x…

字符串压缩(二)之LZ4

一、LZ4压缩与解压 LZ4有两个压缩函数。默认压缩函数原型&#xff1a; int LZ4_compress_default(const char* src, char* dst, int srcSize, int dstCapacity); 快速压缩函数原型&#xff1a; int LZ4_compress_fast (const char* src, char* dst, int srcSize, int dstCapaci…