C#WPF实现TextBox控件水印效果的两种实现方法

在WPF实际项目中往往需要在TextBox中加入水印,来告诉使用者输入TextBox中的内容,如下图片所示:
下面介绍两种方式,来添加上图中的水印效果:
第一种方法:也是最简单的一种,使用第三方的组件库HandyControl来实现,
首先在Nuget中查找HandyControl,并安装,如图:
随后在WPF前端Xaml中引用这个库:

xmlns:hc="https://handyorg.github.io/handycontrol"


随后在App.xaml文件中加入以下代码,用以加入HandyControl样式资源:

<Application x:Class="WaterHole.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WaterHole"StartupUri="MainWindow.xaml"><Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml" /><ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml" /></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources>
</Application>

到这边就差不多引用完毕了,在界面上画个TextBox,引用HandyControl样式,水印添加成功:

      <StackPanel HorizontalAlignment="Left"><TextBlock Text="HandyControl方式加水印" Margin="10"/><TextBox Width="200" Style="{StaticResource TextBoxExtend}"  hc:InfoElement.Placeholder="请输入用户名!" Margin="5"/></StackPanel>


第二种方法:是针对那些不愿意引用第三方库,坚持要自己画的小伙伴的,既然要自己画,那肯定会麻烦一点。
但也不会太麻烦,直接引用下面样式代码就行,在Window.Resources中画出自己想要的样式:

   <Window.Resources><Style TargetType="TextBox" x:Key="UserNameTextBoxStyle"><Setter Property="Height" Value="30"/><Setter Property="FontSize" Value="12"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="TextBox"><Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True" CornerRadius="5"><Grid><TextBlock Text="请输入用户名!" VerticalAlignment="Center" HorizontalAlignment="Left" Foreground="#BBB" Name="markText" Visibility="Collapsed" FontSize="12" Margin="10,0"/><ScrollViewer x:Name="PART_ContentHost" Focusable="False" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"  VerticalAlignment="Center" MinHeight="20"/></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="#FF7EB4EA"/></Trigger><Trigger Property="IsKeyboardFocused" Value="true"><Setter Property="BorderBrush" TargetName="border" Value="#FF569DE5"/></Trigger><DataTrigger Binding="{Binding Path=Text,RelativeSource={RelativeSource Mode=self}}" Value=""><Setter Property="Visibility" TargetName="markText" Value="Visible"/></DataTrigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style></Window.Resources>

随后在界面上画个TextBox,并引用这个自定义样式,水印添加成功:

   <StackPanel><TextBlock Text="自定义样式方式加水印" Margin="10"/><TextBox Width="200" Style="{StaticResource UserNameTextBoxStyle}"  Margin="5" HorizontalAlignment="Left"/></StackPanel>

下面是两种方式的添加效果:

两种方式都能实现水印效果,且自由度都比较高,第一种方法可以通过编辑模板副本的形式来对HandyControl的样式进行更改,以达到自己想要的效果。第二种方式直接在样式代码上更改自己想要的字体,颜色。

以上代码使用VS2022,.net 4.7.2完成和测试。

C#WPF实现TextBox控件水印效果的两种实现方法相关推荐

  1. javascript控制页面控件隐藏显示的两种方法

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: document.all<"PanelSMS">.styl ...

  2. VB.NET学习笔记:自定义控件之扩展TEXTBOX控件——水印文字提示效果

    测试环境:windows 7和Microsoft Visual Studio 2017 看到一些优秀软件里的TEXTBOX文本框都有水印文字提示应该输入什么样的信息,获取光标后提示文字消失,光标离开后 ...

  3. WPF(6)WPF之TextBox控件

    系列文章目录 WPF(1)WPF工程创建 WPF(2)WPF之Image组件 WPF(3)WPF之Button组件 WPF(5)WPF之DataGrid控件 文章目录 系列文章目录 TextBox控件 ...

  4. html左右滑动选择控件,jQuery让控件左右移动的三种实现方法

    方法一 [注]需把控件的 CSS 的 position 属性设置为 relative 或 absolute. $(document).ready(function(){ $("#right1 ...

  5. QT-在子控件上绘图的两种方式

    Qt 在控件上面绘图 label,pushbutton..... 1.构建一个新类来调用该控件的绘图函数,新类重写 paintEvent(QPaintEvent *) ▶构建: class DrawG ...

  6. WPF开发经验-WPF的TextBox控件的MouseDown事件不响应的解决方法

    一 问题的发现 最近项目有个需求,大概是,当点击某个TextBox时,先执行一些业务上的逻辑处理. 于是按以往思维,将TextBox的MouseDown事件关联事件处理方法,将业务处理写在方法里. 调 ...

  7. android如何绑定事件,Android_安卓为按钮控件绑定事件的五种方式

    一.写在最前面 本次,来介绍一下安卓中为控件--Button绑定事件的五种方式. 二.具体的实现 第一种:直接绑定在Button控件上: 步骤1.在Button控件上设置android:onClick ...

  8. 【写笔记】WPF 自定义简单的TextBox控件

    效果图: 笔记分享: https://www.yuque.com/docs/share/4aac743b-1ff0-42d2-9ec3-c605c145a58e?# <WPF 自定义简单的Tex ...

  9. WPF C# VS2013 TextBox控件 限制只能输入数字

    编码语言:C# 编码平台:VS2013 项目类型:WPF TextBox控件  PreviewKeyDown事件 后台代码 //按键为: 非 ( 大键盘0~9 || 小键盘 0~9 || 退格键 ) ...

最新文章

  1. Spring Cloud配置中心获取不到最新配置信息的问题
  2. AtCoder Regular Contest 062 E - AtCoDeerくんと立方体づくり / Building Cubes with AtCoDeer
  3. ubuntu导出数据库
  4. 如何开启mysql计划事件
  5. vue-wechat-title
  6. java高级教程_Java高级教程02
  7. Linux工作笔记-RabbitMQ的安装
  8. 阿里开源mysql监控_Alibaba-技术专区-开源项目之Druid数据库监控平台
  9. mysql 测试数据生成器_8个免费的测试数据/样本数据生成器
  10. 关键词排名的查询方法
  11. 今天申请了亚马逊新加坡站点
  12. 用JQuery实现简单计时答题游戏
  13. android 框架搭建养成的良好习惯(一)
  14. 【文件IO】Linux 文件操作(一) —— 遍历指定目录下的所有文件
  15. 当前线程运行完毕,再运行后续逻辑
  16. 机器学习(18)——分类算法(补充)
  17. 高可用的“异地多活”架构设计
  18. 研究生了,你会查文献吗??这里能会有所帮助
  19. 数字化转型与智能创新100个案例
  20. 几种swf格式视频转换器简介

热门文章

  1. 如何消除word标题前面的竖线 ||Word中标题编号变为竖线处理
  2. Vue.component 讲解
  3. 使用Codejock的换肤界面
  4. 盒子模型的边框及样式
  5. 2022年4月14日,第7天
  6. Leetcode 1227:飞机座位分配概率
  7. 60分钟吃掉三杀模型FiBiNET
  8. JSP:response对象
  9. 双摄方案android,android5.1双摄像头
  10. 谷歌浏览器访问localhost跨域解决