免責申明(必讀!):本部落格提供的所有教程的翻譯原稿均來自於網際網路,僅供學習交流之用,切勿進行商業傳播。同時,**時不要移除本申明。如產生任何糾紛,均與本部落格所有人、發表該翻譯稿之人無任何關係。謝謝合作!
介紹
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許可。
著作權宣告:本文由
WPF 只允許輸入數字的文字框
在網上有不少關入這方面的資料,下面是我選用的乙個方案 public numbertextbox void numbertextbox keydown object sender,keyeventargs e else void numbertextbox textchanged object sen...
vb取消文字框的貼上功能
以下 在窗體 程式 option explicit 石陸軟體屋 private sub form load g holdproc setwindowlong text1.hwnd,gwl wndproc,addressof wndproc end sub private sub form unloa...
改變唯讀文字框的的背景顏色(原)
網上查了下,至少有三種方法可以使文字框變為唯讀屬性 code readonly true locked true enabled false code 可是怎麼改變唯讀文字框的的背景顏色呢?code input code 然後就可以了,達到了我想要的效果,如果想第一次載入時改變背景顏色,點到下乙個文...