当前位置:首页 > 通信资讯 > 正文

wpf passwordbox 绑定(wpf设置textbox内容)

本文实例为大家分享textbox和passwordbox加水印的方法,供大家参考,具体内容如下

textbox加水印

textbox加水印,需要一个visualbrush和触发器验证text是否为空,在空的时候设置背景的brush就可以实现水印效果。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <textbox name="txtboxname" width="120" height="23"> <textbox.resources> <visualbrush x:key="helpbrush" tilemode="none" opacity="0.3" stretch="none" alignmentx="left"> <visualbrush.visual> <textblock fontstyle="italic" text="水印效果"/> </visualbrush.visual> </visualbrush> </textbox.resources> <textbox.style> <style targettype="textbox"> <setter property="height" value="23"/> <setter property="horizontalalignment" value="left"/> <setter property="verticalalignment" value="top"/> <style.triggers> <trigger property="text" value="{x:null}"> <setter property="background" value="{staticresource helpbrush}"/> </trigger> <trigger property="text" value=""> <setter property="background" value="{staticresource helpbrush}"/> </trigger> </style.triggers> </style> </textbox.style> </textbox>

passwordbox加水印

passwordbox加水印,需要添加判断输入非空的依赖属性,因为passwordbox本身没有这个属性。

通过一个passwordlength函数判断密码框的长度是不是0,如果是0则显示背景水印,否则就隐藏。

属性部分代码,cs文件

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 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)); private 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; } } static void passwordchanged(object sender, routedeventargs e) { var pb = sender as passwordbox; if (pb == null) { return; } setpasswordlength(pb, pb.password.length); } }

xmal代码

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <passwordbox name="pb" width="120" verticalalignment="bottom" height="35"> <passwordbox.style> <style targettype="passwordbox"> <setter property="height" value="23"/> <setter property="horizontalalignment" value="left"/> <setter property="verticalalignment" value="top"/> <setter property="local:passwordboxmonitor.ismonitoring" value="true"/> <setter property="template"> <setter.value> <controltemplate targettype="{x:type passwordbox}"> <border name="bd" background="{templatebinding background}" borderthickness="{templatebinding borderthickness}" borderbrush="{templatebinding borderbrush}" snapstodevicepixels="true"> <grid> <scrollviewer x:name="part_contenthost" snapstodevicepixels="{templatebinding snapstodevicepixels}"/> <stackpanel orientation="horizontal" visibility="collapsed" name="mystackpanel"> <textblock horizontalalignment="left" verticalalignment="center" foreground="lightgray" text="水印效果"/> </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>

效果图

wpf passwordbox 绑定(wpf设置textbox内容)

2016-09-07 新增内容

将textblock暴露出来,做一个可以修改水印的textbox控件

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <textbox x:class="oraclecodegenerator.watermarktextbox" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:oraclecodegenerator" mc:ignorable="d" d:designheight="300" d:designwidth="300" name="tb"> <textbox.resources> <visualbrush x:key="helpbrush" tilemode="none" opacity="0.3" stretch="none" alignmentx="left"> <visualbrush.visual> <textblock text="{binding tbtext,elementname=tb}" fontstyle="italic"/> </visualbrush.visual> </visualbrush> </textbox.resources> <textbox.style> <style targettype="textbox"> <setter property="height" value="23"/> <setter property="horizontalalignment" value="left"/> <setter property="verticalalignment" value="top"/> <style.triggers> <trigger property="text" value="{x:null}"> <setter property="background" value="{staticresource helpbrush}"/> </trigger> <trigger property="text" value=""> <setter property="background" value="{staticresource helpbrush}"/> </trigger> </style.triggers> </style> </textbox.style> </textbox>
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 public partial class watermarktextbox : textbox { public watermarktextbox() { initializecomponent(); } private string tbtext; public string tbtext { get { return tbtext; } set { tbtext = value; } } }

调用只有一句话

复制代码 代码如下: <local:watermarktextbox width="150" tbtext="我是水印"/>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://www.cnblogs.com/ZXdeveloper/p/4807209.html

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。