本文经原作者授权以原创方式二次分享,欢迎转载、分享。
原文作者:普通的地球人
原文链接[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]
参考资料
原文链接:
https://www.cnblogs.com/tsliwei/p/5658426.html
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