zoukankan      html  css  js  c++  java
  • 占位符行为 PlaceHolderBehavior 的实现以及使用

    这个效果我不太会描述 PlaceHolder直译占位符 也有人把这个效果叫水印效果 就是和HTML5的PlaceHolder属性一样的效果 上图直观:

    使用方法:

    首先下载 占位符行为dll.rar 在项目中引用dll

    1.在VS中

    引用System.Windows.Interactivity.dll程序集

     

    在xmal页面添加引用:

     然后附加到TextBox

     

    设置行为的属性

    Text值肯定是要设置的了,这个是提示的文字.然后按需设置其他属性.不设置的话,默认取被附加的TextBox的值.

    2.在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

  • 相关阅读:
    html5 postMessage解决跨域、跨窗口消息传递
    获取url参数值(可解码中文值)
    正则去除字符串中的html标签,但不去除<br>标签
    vue中watch检测到不到对象属性的变化的解决方法
    封装LocalStorage.js
    this.$router.push、replace、go的区别
    Javascript实现base64的加密解密
    堆排序
    归并排序
    单例模式
  • 原文地址:https://www.cnblogs.com/tsliwei/p/5658426.html
Copyright © 2011-2022 走看看