占位符行为 PlaceHolderBehavior 的实现以及使用

占位符行为 PlaceHolderBehavior 的实现以及使用

技术教程gslnedu2025-04-23 13:19:486A+A-

本文经原作者授权以原创方式二次分享,欢迎转载、分享。

原文作者:普通的地球人

原文链接[1]
https://www.cnblogs.com/tsliwei/p/5658426.html

  • 这个效果我不太会描述 PlaceHolder直译占位符 也有人把这个效果叫水印效果 就是和HTML5PlaceHolder属性一样的效果
  • 上图直观:
  • 首先下载 占位符行为dll.rar[2] 在项目中引用dll.

一、在VS

  • 引用System.Windows.Interactivity.dll程序集
  • Xmal页面添加引用:
  • 然后附加到TextBox
  • 设置行为的属性
  • Text值肯定是要设置的了,这个是提示的文字.然后按需设置其他属性.不设置的话,默认取被附加的TextBox的值.

二、在Blend

  • Blend中就非常简单了,直接拖到TextBox上就行了
  • 设置属性
  • 这个效果非常常见,又与业务无关,非常适合做成行为Behavior,以方便在不同的项目中使用,而不用去更改控件模版.

  • 介绍下实现的思路:

  • TextBox中有一个组成部件:PART_ContentHost 用于显示文本

  • 于是我想到的最简单的实现方法就是,在这个部件上面加一个TextBlock用于显示提示信息,在TextBoxTextLength>0的时候隐藏该TextBlock,Length=0的时候显示该TextBlock

  • 这样的话,就需要把这个部件拿出来,套上一个Grid,再在Grid里面加上TextBlock,然后把整个Grid放回原来的位置.

  • 既然部件的父级能放下这个FrameworkElement类型的部件,那么它必然继承自DecoratorPanel中的一个.DecoratorChild属性,PanelChildren属性.(用户有可能改控件模版,换成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


点击这里复制本文地址 以上内容由朽木教程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

朽木教程网 © All Rights Reserved.  蜀ICP备2024111239号-8