免責申明(必讀!):本部落格提供的所有教程的翻譯原稿均來自於互連網,僅供學習交流之用,切勿進行商業傳播。同時,轉載時不要移除本申明。如產生任何糾紛,均與本部落格所有人、發表該翻譯稿之人無任何關係。謝謝合作!
原文連結地址:http://www.codeproject.com/KB/WPF/TextBoxWithEllipsis.aspx
介紹
WPF文字框控制項類,不像TextBlock,他沒有內建的選項,以便當常值內容超過可視地區的時候,顯示省略符號,我想讓我正在做的一個項目能夠擁有這個特性,可是,我在網上找不到一個比較簡單的方法實現他,於是啊,我決定自己寫個TextBox的繼承類,必要的時候能夠顯示省略,我把這個類命名為TextBoxWithEllipsis.
TextBoxWithEllipsis屬性列表
既然TextBoxWithEllipsis繼承自TextBox,那麼他就有了TextBox的所有屬性,當然還得有一些其他的屬性,我自己呢,只需要很簡單的幾個屬性,所以就不多加其他的屬性了。
| LongText |
儲存原始的沒有截短的文本,而Text屬性則自動化佈建成他的截斷版本,以省略符號結尾,你也可以把這兩個屬性儲存的內容互換, 隨意。這裡,當我讀取Text屬性的時候,我得到已經截短了的版本,而LongText則得到沒有截斷的版本。 |
| IsEllipsisEnabled |
一個布爾值,使得省略這個功能啟用或者關閉,當啟用的時候,一個省略符號(unicode編碼是0x2026)將會顯示在截斷了 的LongText後面,其他的,和正常的TextBox控制項無異。 |
| UseLongTextForToolTip |
這個bool屬性為true的時候,當把滑鼠放到截斷了的文字框上面時,會通過tooltip的方式顯示完整的常值內容。 |
樣本程式
樣本程式是一個vs2010 c# WPF工程,包含兩個相關的類
TextBoxWithEllipsis.cs 這個實現了咱們這個類,你可以簡單的把他拷貝到你自己的工程裡,可能你得改改命名空間
MainWindow.xaml 自適應的WPF視窗,用來測試咱們這個控制項
運行後,直接在“Source Text”文字框裡輸入文本,然後在下面設定一下選項,提示之類的。這個控制項的位置大小會隨著視窗的改變而改改變。並且,當你把焦點移動到我寫的這個文字框的時候,省略功能會暫時取消,好讓你編輯。
實現
代碼假定TextBox.ViewportWidth <TextBox.ExtentWidth,文本放不下因此需要省略符號,測試在LayoutUpdated事件控制代碼中進行,如果文本太長了,就進行二分搜尋,設定Text屬性的長度為上一次太短的和上一次太長的和的一半,Text屬性的改變導致了LayoutUpdated的再一次調用,這樣就一直重複知道找到了LongText合適的子串。
OnTextChanged()方法也被重載以防止當Text屬性被內部改變(比如 LayoutUpdated方法)或從外部輸入或者粘貼到這個控制項的時候。TextChanged事件被觸發,在重載的函數裡,我們就把Text的值又賦值給LongText。然後就可以了
許可
此文章和包含的所有代碼遵循MIT許可。
範例程式碼下載
著作權聲明:本文由http://www.cnblogs.com/lazycoding翻譯,歡迎轉載分享。請尊重作者勞動,轉載時保留該聲明和作者部落格連結,謝謝!