WPF参考做的TextBox圆角,并且水印文字操作

1.首先进行 转换器操作(获取当前Textbox Text是否为空或者空格)
/

// <summary>/// 非空验证转换器/// </summary>#region String IsNullOrEmptypublic class IsNullOrEmptyConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){return string.IsNullOrEmpty((string)value);}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return DependencyProperty.UnsetValue;}}#endregion 
2.设置附加属性给Textbox
   public class TextBoxHelper{#region Watermarkpublic static string GetWatermark(DependencyObject obj){return (string)obj.GetValue(WatermarkProperty);}public static void SetWatermark(DependencyObject obj, string value){obj.SetValue(WatermarkProperty, value);}public static readonly DependencyProperty WatermarkProperty =DependencyProperty.RegisterAttached("Watermark", typeof(string), typeof(TextBoxHelper));#endregion} 

3,设定样式:

  <Style x:Key="HelperTextWaterCanEdit" 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="BackBorder" SnapsToDevicePixels="true"          Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"  VerticalAlignment="{TemplateBinding VerticalAlignment}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}"  Background="{TemplateBinding Background}" CornerRadius="5"  BorderThickness="{TemplateBinding BorderThickness}" Tag="{TemplateBinding Tag}" BorderBrush="{TemplateBinding BorderBrush}"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="35"/></Grid.ColumnDefinitions><ScrollViewer  Grid.Column="0" x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/><TextBlock  x:Name="tbWatermark"Grid.Column="0"Padding="2,0"Margin="{TemplateBinding Padding}"Foreground="{TemplateBinding Foreground}"FontSize="{TemplateBinding FontSize}"TextWrapping="Wrap"Focusable="False"IsHitTestVisible="False"Visibility="Collapsed"Text="{Binding Path=(local:TextBoxHelper.Watermark),RelativeSource={RelativeSource AncestorType=TextBox}, Mode=OneWay}"VerticalAlignment="Center"HorizontalAlignment="Left"Opacity="0.5" /><TextBlock Name="Danwei" Grid.Column="1" Text="{Binding Tag, RelativeSource={RelativeSource AncestorType=TextBox, Mode=FindAncestor}}" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,0,5,0"/> </Grid></Border><ControlTemplate.Triggers><DataTrigger Binding="{Binding Text,RelativeSource={RelativeSource Self},Converter={StaticResource IsNullOrEmptyConverter }}"  Value="True"><Setter Property="Visibility" TargetName="tbWatermark" Value="Visible" /></DataTrigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style> 

其中有个需要设定 附件属性的地方就是(本次我们把操作类放在同一个文件夹所以使用Local 就可以找到对应的属性):

  Text="{Binding Path=(local:TextBoxHelper.Watermark),RelativeSource={RelativeSource AncestorType=TextBox}, Mode=OneWay}"

但是因为转换类是在其他方法内,所以此地需要引入操作

  <DataTrigger Binding="{Binding Text,RelativeSource={RelativeSource Self},Converter={StaticResource IsNullOrEmptyConverter }}"  Value="True">

引入的写法和xaml标准方法: 引入地址

xmlns:local1="clr-namespace:海王牌位系统.CommonInMy.Converter">

设定本地读取key

<local1:IsNullOrEmptyConverter x:Key="IsNullOrEmptyConverter"/>

4 应用在界面的xaml下的操作:引入Key

 <Window.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="../CommonInMy/Styles/TextBoxStyle.xaml"></ResourceDictionary></ResourceDictionary.MergedDictionaries></ResourceDictionary></Window.Resources>

当然也要引用附加属性所在地址:

xmlns:Local1="clr-namespace:海王牌位系统.CommonInMy.Styles"

使用在textbox下的操作:

  <TextBox Name="GetText" Width="200" Tag="Kg" Height="30" Style="{DynamicResource  HelperTextWaterCanEdit}" Local1:TextBoxHelper.Watermark="你觉得好吗" ></TextBox>

其中水印 就是附加属性 设定的text ,Tag则单位的显示数据。
效果如下:使用text 读出来的实际就是textbox里的值
在这里插入图片描述

使用附加属性操作水印建议推荐先拜读这篇文章
https://blog.csdn.net/qq_39488878/article/details/126251868

使用圆角以及水印加入单位推荐拜读这个
https://cloud.tencent.com/developer/article/1513535
其中原来的样式是粘贴下直接可以使用,确定就是水印不能自己随意修改:

 <SolidColorBrush x:Key="TextBox.Static.Border" Color="#FFABAdB3"/><SolidColorBrush x:Key="TextBox.MouseOver.Border" Color="#FF7EB4EA"/><SolidColorBrush x:Key="TextBox.Focus.Border" Color="#FF569DE5"/><VisualBrush x:Key="HintText" TileMode="None" Opacity="0.5" Stretch="None" AlignmentX="Left"><VisualBrush.Visual><TextBlock FontStyle="Italic" Text="请输入数据"/></VisualBrush.Visual></VisualBrush><Style x:Key="TBoxLightWatermarkWithUnit" 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="2"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="35"/></Grid.ColumnDefinitions><ScrollViewer Grid.Column="0" x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/><TextBlock Grid.Column="1" Text="mm" VerticalAlignment="Center" Margin="0,0,5,0"/></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="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><Trigger Property="Text" Value="{x:Null}"><Setter Property="Background" Value="{StaticResource HintText}"/></Trigger><Trigger Property="Text" Value=""><Setter Property="Background" Value="{StaticResource HintText}"/></Trigger></Style.Triggers></Style>

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

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

相关文章

C++——模板进阶

小伙伴们大家好啊&#xff0c;停更了两个月深表歉意&#xff0c;作者调整好了状态&#xff0c;今后将继续为大家分享C的相关知识。 在前面的模板初阶中&#xff0c;我们介绍了模板的基本类型以及用法&#xff0c;包括函数模板和类模板&#xff0c;本文我们讲对模板进行更深入的…

ffmpeg -- 常用口令

文章目录 1.视频格式转换2.设置比特率3.设置帧率4.强制让输入视频帧率为1&#xff0c;输出视频帧率为245.长视频截短6.自动分割视频的bash脚本7.每一帧都保存成图片 1.视频格式转换 ffmpeg -i input.avi output.mp42.设置比特率 ffmpeg -i input.avi -b:v 64k -bufsize 64k o…

甄选范文“论负载均衡技术在Web系统中的应用”软考高级论文系统架构设计师论文

论文真题 负载均衡技术是提升Web系统性能的重要方法。利用负载均衡技术, 可将负载(工作任务) 进行平衡、分摊到多个操作单元上执行, 从而协同完成工作任务, 达到提升Web系统性能的目的。 请围绕“负载均衡技术在Web系统中的应用”论题, 依次从以下三个方面进行论述。 1.…

【ARM】ULINK Pro如何和SWD接口进行连接调试

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决ULINK Pro和JTAR接口进行连接问题。 2、 问题场景 因为ULINK Pro本身自带的接口是Cortex-M ETM Interface 20-pin Connector。所以无法和JTAR接口直接进行连接。 图2-1 3、软硬件环境 1&#xff09;、软件版…

【微信小程序实战教程】之微信小程序中的 JavaScript

微信小程序中的 JavaScript 微信小程序的业务逻辑都是通过JavaScript语言来实现的&#xff0c;本章我们将详细的讲解JavaScript的基本概念&#xff0c;以及在小程序中如何使用JavaScript语言。JavaScript是一种轻量的、解释型的、面向对象的头等函数语言&#xff0c;是一种动态…

vue 开发工具 Hbuilder 简介及应用

一、简介 HBuilderX 是一款流行的前端开发工具&#xff0c;由DCloud公司开发。它支持多种编程语言&#xff0c;如HTML、CSS、JavaScript、Vue、UniApp等&#xff0c;非常适合用来开发Web应用、移动端应用和跨平台应用。 官网地址&#xff1a;https://www.dcloud.io/hbuilderx.…

UE基础 —— 工具和编辑器

目录 Level Editor Static Mesh Editor Material Editor Blueprint Editor Physics Asset Editor Behavior Tree Editor Niagara Editor UMG UI Editor Font Editor Sequencer Editor Animation Editor Control Rig Editor Sound Cue Editor Media Editor nDisp…

SB3045LFCT-ASEMI无人机专用SB3045LFCT

编辑&#xff1a;ll SB3045LFCT-ASEMI无人机专用SB3045LFCT 型号&#xff1a;SB3045LFCT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 批号&#xff1a;最新 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;30A 最大循环峰值反向电压&#xff08;VRRM&…

【IEEE独立出版】第四届计算机科学与区块链国际学术会议 (CCSB 2024)

第四届计算机科学与区块链国际学术会议 (CCSB 2024) 2024 4th International Conference on Computer Science and Blockchain 2024年9月6-8日 中国-深圳 老牌会议 | 涵盖计算机学科 | 往届均完成见刊、稳定检索 | 论文录用速度快 | 有ISBN号! *关于IEEE出版社 电气电子工…

Ubuntu23.10 安装kvm并使用nmtui创建桥接网络

1.实验准备 &#xff08;1&#xff09;使用Vmware安装Ubuntu23.10 2.实验步骤 &#xff08;1&#xff09;配置ssh &#xff08;2&#xff09;安装qemu &#xff08;3&#xff09;安装libvirt服务 &#xff08;4&#xff09;安装virtinst &#xff08;5&#xff09;启动libvir…

Android14音频进阶调试之命令播放mp3/aac非裸流音频(八十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更…

糟糕界面集锦-控件篇03

非常感激 Gordon Allison 提供这个样本。 很高兴通知你们各位&#xff0c;微软的界面设计原来是由艺术家而不是界面设计师来完成的。 在 Word 97 的字体对话框中用户可以用一堆复选框来选择字体属性。这没什么问题。但是&#xff01;其中有4 对选项是互斥的&#xff1a;删除线…

web通用漏洞

web通用漏洞 文章目录 web通用漏洞1. SSRF1. gopher伪协议2. 常见绕过1. ip地址绕过2. DNS重绑定攻击 3. mysql未授权4. tomcat漏洞5. redis未授权写webshell6. redis 未授权写入ssh公钥7. redis 未授权计划任务shell反弹 2. XXE测试 3. XSS4. CSRF关于vmware的网络参考 1. SSR…

AI面试:未来招聘的新常态?

一、引言&#xff1a;招聘变革的序章 在数字化浪潮的推动下&#xff0c;各行各业正经历着前所未有的变革&#xff0c;而人力资源管理作为企业发展的核心驱动力之一&#xff0c;也迎来了其转型升级的关键时刻。传统招聘流程中&#xff0c;简历筛选、初步面试、复试乃至终面&…

使用ubuntu串口数据收和发不一致问题

串口配置 使用virtual Serial Port Driver Pro模拟串口两个串口&#xff0c;com2和com3&#xff0c;使用默认配置&#xff1b;通过virtual box 串口映射功能&#xff0c;在Ubuntu里使用CuteCom打开com2接受和发送数据&#xff0c;在windows里使用com3发送和接收数据。 遇到问…

【简历】扬州某一本大学:前端秋招简历指导,面试通过率低

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是25届一本前端同学的简历。这是一个老牌一本学校&#xff0c;老牌一本定位求职层次&#xff0c;可以从传统的中厂上升到大厂。学历可以…

使用WPF将window 添加到TabControl里面的方法

首先 1.window 不能添加到其他控件中&#xff0c;原因是他是最高级的。。 在window usercontrol&#xff0c;以及page&#xff0c;frame 基本都遵循这个道理&#xff0c;可以添加的则是 除window以外的其他窗体。 2.添加到TabControl 下面的TabItem 控件添加usercontrl我遇到的…

JAVA中的volatile和synchronized关键字详解

1.volatile 保证可见性&#xff1a;当一个变量被声明为volatile&#xff0c;编译器和运行时都会注意到这个变量是共享的&#xff0c;并且每次使用这个变量时都必须从主内存中读取&#xff0c;而不是从线程的本地缓存或者寄存器中读取。这确保了所有线程看到的变量值都是最新的…

家里浮毛多?宠物空气净化器真的有效果吗?

看到朋友养了几只猫狗&#xff0c;感觉很幸福。犹豫了许久之后&#xff0c;还是买了一只猫&#xff0c;也算不用老是去朋友家撸猫&#xff0c;自己在家就可以实现随时随地撸猫。养了猫之后&#xff0c;我的精神状态都变好了并不少&#xff0c;整个人都容光焕发了&#xff0c;朋…

如何快速从文本中找到需要的信息,字典和正则灵活运用

import re #打开文本文件 f open("stock_data.txt",encoding"utf-8") #单独读取第一行数据处理进行分割&#xff0c;末尾换行符去掉 headers f.readline().strip().split(,) print(headers) #定义一个字典&#xff0c;以股标代码做为KEY,每个行做为值 st…