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

最近在学WPF写一个登录界面,遇到了一个给文本框和密码框加水印的问题,部分解决方案与网上的有所不同。直接来效果:

文本框TextBlock加水印

这个方案是直接参考网上好心网友的,大致思路就是通过VisualBrush创建一个带有提示语的背景Background,判断TextBlock的内容是否为空进而设置背景是否显示。
代码如下:

   <!--用户名背景水印提示--><VisualBrush x:Key="UserNameHelpBrush" Opacity="0.5" AlignmentX="Left" Stretch="None" ><VisualBrush.Visual><TextBlock Text = "{DynamicResource InputUserName }"Foreground ="Gray"  Background="White" /></VisualBrush.Visual></VisualBrush><!--***********************************************UserName模板***************************************--><SolidColorBrush x:Key="TextBox.Static.Border" Color="#FFABAdB3"/><SolidColorBrush x:Key="TextBox.MouseOver.Border" Color="#FF7EB4EA"/><SolidColorBrush x:Key="TextBox.Focus.Border" Color="#FF569DE5"/><Style x:Key="UserNameTextBoxStyle" TargetType="{x:Type TextBox}"><Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/><Setter Property="BorderBrush" Value="{StaticResource TextBox.Static.Border}"/><Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/><Setter Property="BorderThickness" Value="1"/><Setter Property="KeyboardNavigation.TabNavigation" Value="None"/><Setter Property="HorizontalContentAlignment" Value="Left"/><Setter Property="FocusVisualStyle" Value="{x:Null}"/><Setter Property="AllowDrop" Value="true"/><Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/><Setter Property="Stylus.IsFlicksEnabled" Value="False"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type TextBox}"><Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"SnapsToDevicePixels="True" CornerRadius="5"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="40"/><ColumnDefinition /></Grid.ColumnDefinitions><TextBlock Text="" FontFamily="../Assets/Fonts/#iconfont"FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#FF007DFA"/><ScrollViewer x:Name="PART_ContentHost" Grid.Column="1"Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"VerticalAlignment="Center" MinHeight="20" HorizontalAlignment="Left" Width="237"/><!--<Border Visibility="Hidden"/><ContentControl Grid.Column="1" x:Name=" Pressed"/>--></Grid></Border><ControlTemplate.Triggers><Trigger Property="IsEnabled" Value="false"><Setter Property="Opacity" TargetName="border" Value="0.56"/></Trigger><Trigger Property="IsMouseOver" Value="true"><Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.MouseOver.Border}"/></Trigger><Trigger  Property="Text"   Value="" ><Setter  TargetName="PART_ContentHost" Property="Background" Value="{StaticResource UserNameHelpBrush}"/></Trigger>   <Trigger Property="IsKeyboardFocused" Value="true"><Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.Focus.Border}"/></Trigger>    </ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter><Style.Triggers><MultiTrigger><MultiTrigger.Conditions><Condition Property="IsInactiveSelectionHighlightEnabled" Value="true"/><Condition Property="IsSelectionActive" Value="false"/></MultiTrigger.Conditions><Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/></MultiTrigger></Style.Triggers></Style><TextBox  x:Name="UserName" Height="30" Style="{DynamicResource UserNameTextBoxStyle}" FontSize="12" Width="200" />

可以直接参考这位网友的,比较详细,链接:c#笔记–WPF文本框和密码框添加水印效果(背景文字提示)

密码框PassWord加水印

由于密码框没有可以用于判断输入值非空的依赖属性,因此不能采用上述方法,对于我这种C#小白而言,看网友的解答有点费劲。这里提供一个比较简便的方法,大致思路是:

  1. 在密码框上面加上一个TextBlock用于输入前的提示
  2. 在C#代码中判断Password的输入是否为空
  3. 为空则让TextBlock的内容为“请输入密码”,反之亦然

这里有一个TextBlock的IsHitTestVisible属性需要设置为False,当点击该框,无法定位,无法向该框输入内容。这样就可以避免在输入密码时点击到TextBlock导致无法输入。

XMAL 代码如下:

<PasswordBox x:Name="Password"  Grid.Row="1"  Height="30"Style="{DynamicResource PasswordBoxStyle}"  FontSize="12"common:PasswordHelper.Attach="True" PasswordChanged="Password_PasswordChanged"common:PasswordHelper.Password="{Binding LoginModel.Password,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged }" Width="200"/>
<TextBlock x:Name="PassWordHelp" Grid.Row="1" Text="{DynamicResource InputPassWord}" FontSize="12"   IsHitTestVisible="False" Margin="65,13.2,0,11.6" FontWeight="Normal" HorizontalAlignment="Left"         VerticalAlignment="Center" Height="16" ><TextBlock.Foreground><SolidColorBrush Color="Gray" Opacity="0.5"/></TextBlock.Foreground></TextBlock>

C#代码如下:

  private void Password_PasswordChanged(object sender, RoutedEventArgs e){if (string.IsNullOrEmpty(Password.Password)){PassWordHelp.Text = FindResource("InputPassWord") as string;}else{PassWordHelp.Text = "";}}

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

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

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

  2. WPF教程(二十)密码框

    WPF中编辑常规的文字都是使用文本框,但是如果是输入密码呢?功能应该是一样的,但是我们不想周边的人看着我们一个字母一个字母的输入,这样密码就被泄漏了,因此我们想用别的字符来替代真实密码的显示.出于这个 ...

  3. TextBox文本框与PasswordBox密码框水印

    在开发一个软件和网页的时候,都会有一个功能,那就是登陆功能,有了登陆那就一定需要用户输入账号和密码,我们在写登陆页面都会想到使用TextBox和PasswordBox去完成这两个功能,但是有一个问题, ...

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

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

  5. MySQL数据库用户密码连续5次输入错误限定用户登录

    为数据库安全第三方会进行渗透测试,为防止恶意暴力破解用户密码,在用户登录时密码连续输入错误一定次数后限定用户的登录.本文通过插件实现当用户连续输入5次错误密码后显示其登录. 连接控制插件 MySQL数 ...

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

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

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

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

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

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

  9. Java窗口(JFrame)从零开始(8)——文本框+文本域+密码框

    应该最后一章了,前面有大神提到很少有人用Java做UI,这里就算是给像我这样的初学者去了解窗体是怎么一回事的文章吧 文本框(JTextField) 构造方法摘要 JTextField() 构造一个新的 ...

最新文章

  1. iOS 11开发教程(三)运行第一个iOS 11程序
  2. 原生js实现preAll和nextAll方法
  3. docker 中部署一个springBoot项目
  4. STM32的时钟系统RCC详细整理
  5. Memcache-No.03 Memcache相关安装、部署、启动、监控
  6. 如何从USB运行Windows 8 Developer Preview
  7. 错误诊断:索引数据错误导致ORA-00600 [kdsgrp1]处理
  8. 51Nod 1058 N的阶乘的长度
  9. VBS 访问WMI读取IP地址,并将其设置为静态IP
  10. javascript的一些各浏览器不兼容的地方
  11. Jmeter 压测工具使用手册(完整版)
  12. 采样频率和带宽的关系_示波器的采样率及存储深度
  13. 务器性能变慢 c盘temp文件夹存在大量sess开头文件的问题原因
  14. vscode+authorized_keys登录不上的原因
  15. 干货 | 读懂这篇文,玩游戏还会卡顿?
  16. 搭配Online|原光辉调研沁水县文物保护和城市建设工作
  17. tkinter 小说编写器,文本编辑器,小说阅读器
  18. android11开发版小米,小米CC9推送MIUI 12.5稳定版 新版系统内核升级至安卓11
  19. ArcGIS教程:解决在mxd文件,定义投影之后,数据源还是的投影坐标系还是未发生改变的问题。
  20. 软件体系结构的基本概念与作用

热门文章

  1. Docker --restart参数
  2. 非技术性的面试中的技巧性回答集锦(建议收藏)
  3. Go搭配mysql_GitHub - goshark/dhs: go语言搭配vue前端实现mysql双机热备管理平台
  4. 微信小程序rich-text富文本 图片自适应宽度
  5. BIGEMAP手机在线地图的查看
  6. 【编程】8086/8088CPU最小/大模式
  7. Android性能优化典范 - 第2季
  8. scrum站立会议学习
  9. stm32如何读取并口_STM32 的并口总线的所有接口类型解决方法
  10. STM32定时器配置(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时器+普通定时器,定时计数模式下总结