重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

WPF如何制作TextBox水印效果

这篇文章给大家分享的是有关WPF如何制作TextBox水印效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

成都创新互联公司2013年成立,先为双江等服务建站,双江等地企业,进行企业商务咨询服务。为双江企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

一种自以为是的方式:

本来只是想简单的做个水印效果,在文本框内容为空的时候提示用户输入,这种需求挺常见。网上一搜 都是丢给你你一大段xaml代码。用c#代码实现我是不倾向了 既然用wpf就得Xaml啊。首先我想到的是template嘛 wpf到处离不开template 。我想到的是一个border 套一个textblock嘛 然后让文本内容通过templateBinding到Text嘛 搞得不亦乐乎 ,并且也确实很快就达到了我要的效果:


  
    
      
        
      
      
        
          
            
          
          
            
              
                
                  请输入内容22
                
              
            
          
        
      
    
  

最后仔细一看杯具的发现文本内容输入的时候没有光标,然后我想到的就是把模板里的textblock改为textbox就完了嘛。好 一改更杯具了 水印效果抽风了 最后发现 用c#代码 强制让文本框Focus() 貌似就可以 ,也许本身元素就是TextBox 模板里面 再放TextBox 就会导致焦点无法获取造成各种混乱吧。最后弄不好 。

通过尝试更改TextBox自带的模板来达到效果

导出系统默认textBox的模板visualTree ,经过尝试成功达到效果,值得一提的是 我纳闷儿网上那些人为甚有的一贴出的xaml代码里面就是scrollviewer呢 并且还能够正确运行 让我很难理解 ,一看原来系统默认的就是scrollviewer 原来如此 还有Name=PART_ContentHost  只要写成他自然而然就能被当初内容宿主处理。看来PART_ContentHost  是个很特殊的系统名称,还有就是多行文本框通过 设置AcceptsReturn="True" VerticalScrollBarVisibility="Auto" 属性来达到:


  
    
      
      
        
      
      
        
          
            
            
          
          
            
              
                
                  
                  请输入内容
                
              
            
          
        
        
          
        
      
    
  

另一种方式:

还有一种方式就是直接控制外围的style trigger也可达到效果,只不过圆角border你必须要在text控件外再套border才能实现:


  
    
      
      
      
        
          
            
          
          
            
              
                
                  
                    请输入内容
                  
                
              
            
          
        
      
    
  

最终效果:

WPF如何制作TextBox水印效果

感谢各位的阅读!关于“WPF如何制作TextBox水印效果”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


网站标题:WPF如何制作TextBox水印效果
链接分享:http://cqcxhl.com/article/jgocho.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP