本文实例为大家分享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 >
|
效果图
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