占位符行為 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM