设为首页 收藏本站
查看: 810|回复: 0

Win8应用开发之带水印文本框

[复制链接]

尚未签到

发表于 2015-5-21 10:17:30 | 显示全部楼层 |阅读模式
  主题:开发带有水印的文本框控件。水印格式可以自定义。
  

1. 最后结果
  如图:
DSC0000.png
  

2. 主要思想
  1. 在原来的TextBox中,添加并注册一个依赖属性:Watermark,用于前台自定义水印。
  2. 在原来的TextBox样式,添加一个用于呈现水印的内容控件:ContentPresenter,并且将Content绑定Watermark。
  3. 给整体控件添加GetFocus,LostFocus事件。以便,在获得焦点时,消失水印。失去焦点时,显示水印。



3. 新建项目和空间
  1.新建一个项目:WatermarkerTextBoxControl
  2.右击项目,添加新建项,选择模板式控件,并命名为WatermarkerTextBox.cs
DSC0001.jpg
  
  
  3.将下面代码拷入该模板控件里面:


DSC0002.gif DSC0003.gif


1 public sealed class WatermarkTextBox : TextBox
2     {
3         public static DependencyProperty WatermarkProperty = DependencyProperty.Register("Watermark", typeof(object), typeof(WatermarkTextBox), new PropertyMetadata(null));
4         public object Watermark
5         {
6             get { return (object)GetValue(WatermarkProperty); }
7             set { SetValue(WatermarkProperty, value); }
8         }
9         public static DependencyProperty WatermarkTemplateProperty = DependencyProperty.Register("WatermarkTemplate", typeof(DataTemplate), typeof(WatermarkTextBox), new PropertyMetadata(null));
10         public DataTemplate WatermarkTemplate
11         {
12             get { return (DataTemplate)GetValue(WatermarkTemplateProperty); }
13             set { SetValue(WatermarkTemplateProperty, value); }
14         }
15
16         public WatermarkTextBox()
17         {
18             this.DefaultStyleKey = typeof(WatermarkTextBox);
19             this.DefaultStyleKey = typeof(WatermarkTextBox);
20             this.GotFocus += WatermarkTextBox_GotFocus;
21             this.LostFocus += WatermarkTextBox_LostFocus;
22         }
23         void WatermarkTextBox_GotFocus(object sender, RoutedEventArgs e)
24         {
25             GoToWatermarkVisualState();
26         }
27
28         void WatermarkTextBox_LostFocus(object sender, RoutedEventArgs e)
29         {
30             GoToWatermarkVisualState(false);
31         }
32
33         private void GoToWatermarkVisualState(bool hasFocus = true)
34         {
35             //如果文本框内容为空 或者 没有获得焦点时,显示水印
36             //否则,就隐藏水印
37             if (String.IsNullOrEmpty(Text) && !hasFocus)
38                 GoToVisualState("WatermarkVisible"); //TODO: create constants for our magic strings
39             else
40                 GoToVisualState("WatermarkCollapsed");
41         }
42
43         private void GoToVisualState(string stateName, bool useTransitions = true)
44         {
45             //控制水印状态
46             VisualStateManager.GoToState(this, stateName, useTransitions);
47         }
48
49         protected override void OnApplyTemplate()
50         {
51             base.OnApplyTemplate();
52
53             //we need to set the initial state of the watermark
54             GoToWatermarkVisualState(false);
55         }
56
57     }
View Code  代码讲解:
  1). 给该控件注册,两个依赖属性,并且添加相应的属性索引器。但是有用的只是:Watermark属性。
  2). 在控件构造函数中,添加GetFocus和LostFocus事件,并在事件中添加水印显示与否代码。
  3). 水印的控制VisualState会写在该控件的样式中
  

4. 重写WatermarkTextBox的样式
  1. 打开Theme文件夹下的Generic.xaml文件:
DSC0004.jpg
  2. 将下面的样式代码替换原来的WatermarkTextBox样式:





  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                                                            
58                                                         
59                                                                             
60                                                
61                                                
62                                                
63                                                     
64                                                
65                                             
66                                         
67                                    
68                                 
69                             
70                        
71                        
72                             
73                             
74                        
75                        
76                             
77                                 
78                                    
79                                         
80                                             
81                                                
82                                                     Visible
83                                                
84                                             
85                                         
86                                    
87                                 
88                                 
89                             
90                             
91                                 
92                                    
93                                         
94                                             
95                                         
96                                         
97                                             
98                                         
99                                         
100                                             
101                                         
102                                    
103                                 
104                                 
105                                    
106                                         
107                                         
108                                    
109                                 
110                                 
111                                    
112                                         
113                                         
114                                    
115                                 
116                                 
117                             
118                             
119                                 
120                                    
121                                         
122                                             
123                                                
124                                                     Visible
125                                                
126                                             
127                                         
128                                    
129                                 
130                                 
131                             
132                        
133                        
134                        
135                        
136                        
139                        
140                     
141                 
142            
143         
144     
View Code


5. 在需要的地方引用该控件





1
2         
3            
4                 
5                     
6                     
7                 
8            
9         
10         
View Code   

6.参考文章:

http://elegantcode.com/2012/03/06/create-your-first-winrt-watermarktextbox-control/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-69107-1-1.html 上篇帖子: Win8/8.1 .NET3.5安装 下篇帖子: Cocos2dx开发(1)——Win8.1下 NDK r10 环境搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表