本文经原作者授权以原创方式二次分享,欢迎转载、分享。
原文作者:普通的地球人
原文链接[1]:
https://www.cnblogs.com/tsliwei/p/5658426.html
这个效果我不太会描述
PlaceHolder直译占位符 也有人把这个效果叫水印效果 就是和HTML5的PlaceHolder属性一样的效果上图直观:
首先下载 占位符行为dll.rar[2]在项目中引用
dll.
一、在VS中
引用
程序集
System.Windows.Interactivity.dll
在
Xmal页面添加引用:
然后附加到
TextBox
设置行为的属性
Text值肯定是要设置的了,这个是提示的文字.然后按需设置其他属性.不设置的话,默认取被附加的TextBox的值.
二、在Blend中
在
Blend中就非常简单了,直接拖到TextBox上就行了
设置属性
这个效果非常常见,又与业务无关,非常适合做成行为
Behavior,以方便在不同的项目中使用,而不用去更改控件模版.介绍下实现的思路:
TextBox中有一个组成部件:PART_ContentHost用于显示文本
于是我想到的最简单的实现方法就是,在这个部件上面加一个
TextBlock用于显示提示信息,在TextBox的Text的Length>0的时候隐藏该TextBlock,Length=0的时候显示该TextBlock这样的话,就需要把这个部件拿出来,套上一个
Grid,再在Grid里面加上TextBlock,然后把整个Grid放回原来的位置.既然部件的父级能放下这个
FrameworkElement类型的部件,那么它必然继承自Decorator或Panel中的一个.Decorator有Child属性,Panel有Children属性.(用户有可能改控件模版,换成Grid之类的,不改的话,就是继承自Decorator)这样的话,找到这个部件和它的父级,就能实现这个效果了.
Panel我值考虑了4种情况:StackPanel,DockPanel,Grid,Canvas依赖属性
6个:Text,FontSize,Foreground,HorizontalAlignment,VerticalAlignment,Margin
个人能力有限,难免有不完善的地方,欢迎广大博友补充指正
最后附上完整Demo源码: 占位符行为源码.rar[3]
参考资料
[1]
原文链接:
https://www.cnblogs.com/tsliwei/p/5658426.html
[2]
dll.rar: https://files.cnblogs.com/files/tsliwei/%E5%8D%A0%E4%BD%8D%E7%AC%A6%E8%A1%8C%E4%B8%BAdll.rar
[3]
占位符行为源码.rar:
https://files.cnblogs.com/files/tsliwei/%E5%8D%A0%E4%BD%8D%E7%AC%A6%E8%A1%8C%E4%B8%BA%E6%BA%90%E7%A0%81.rar