原譯 自動省略功能的WPF文字框控制項

2022-02-07 12:29:31 字數 1649 閱讀 2528

免責申明(必讀!):本部落格提供的所有教程的翻譯原稿均來自於網際網路,僅供學習交流之用,切勿進行商業傳播。同時,**時不要移除本申明。如產生任何糾紛,均與本部落格所有人、發表該翻譯稿之人無任何關係。謝謝合作!

介紹

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 然後就可以了,達到了我想要的效果,如果想第一次載入時改變背景顏色,點到下乙個文...