WPF進階技巧和實戰03-控件(3-文本控件及列表控件)


系列文章鏈接

文本控件

WPF提供了3種用於輸入的文本控件:TextBox、RichTextBox和PasswordBox。前兩種繼承自TextBoxBase類,最后一個繼承自Control類。文本框能夠包含的內容類型是有限的。TextBox控件總是存儲字符串(Text屬性),PasswordBox控件也處理字符串內容(Password屬性)。只有RichTextBox控件可以存儲更復雜的內容(可包含復雜元素組合的FlowDocument對象)

多行文本

TextBox控件通常存儲單行文本(可以通過設置MaxLength屬性來限制字符的數量)。有些情況下需要處理大量內容,也就要使用多行文本框。TextWrapping屬性設置為Wrap或者WrapWithOverflow,如果是前者,總是會在控件的邊緣換行,甚至將一個特別長的單詞放在兩行中。如果是后者,換行算法在沒有發現合適的位置(空格或者連字符)進行換行,就允許拉伸某些行使其超出右邊緣。

為了能自動在文本框中看到多行文本,需將其尺寸設置的足夠大。不應該設置硬編碼的高度(這樣不能適應不同的字體大小,而且可能導致布局問題),可使用方便的MinLines和MaxLines屬性,分別設置文本框中必須顯示的最小行數和能夠顯示的最大行數。

如果文本框支持換行,用戶可輸入更多能夠立即在可視行中顯示的文本。因此通過將VerticalScrollBarVisibility屬性設置為Visible或者Auto,添加始終顯示或按需顯示的滾動條是有意義的。如果允許在用戶在多行文本框中通過Enter輸入回車,需要將AcceptsReturn屬性設置為true。也可以通過設置AcceptsTabs屬性,允許用戶輸入Tab鍵。TextBox還提供了幾個方法,通過這些方法可使用代碼以較小或者較大的步長在文本內容中移動。LineUp,LineDown,PageUp,PageDown,ScrollToHome,ScrollToEnd,ScrollToLine。

如果是為了顯示文本的文本框,這時可以使用IsReadOnly屬性設置為true以阻止編輯文本。最好通過IsEnabled屬性設置為false來禁用文本框,會顯示灰色的文本,不支持文本選擇和復制,滾動。

選擇文本

任何文本框都可以通過鼠標單擊並拖動鼠標,或者按住shift鍵並使用方向鍵在文本中移動來選擇文本。TextBox類還提供了使用SelectionStart、SelectionLength以及SelectedText屬性,通過編程決定選擇哪些文本或改變當前所選文本的能力。

SelectionStart屬性確定所選文本的開始位置,該位置從0開始。SelectionLength屬性指示選中的字符的總數量,0表示未選中字符。SelectedText屬性可快速檢查或者改變在文本框中選中的文本。可以通過處理SelectionChanged事件對文本選擇變化加以響應。還提供了控制文本選擇行為的屬性AutoWorldSelection,如果為true,那么當在文本中拖動鼠標時文本框每次會選擇整個單詞。

文本框有Undo功能,允許用戶撤銷最近的操作。只要未將CanUndo屬性設置為false,就可以通過代碼獲取Undo功能,調用此方法,並使用Ctrl+Z快捷鍵。

TextBox還支持拼寫檢查,只需要將SpellCheck.IsEnabled依賴項屬性設置為true即可。目前只局限於4中語言:英語、法語、德語、西班牙語。可通過TextBox控件的Language屬性重寫默認設置,拼寫檢查根據鍵盤配置的輸入語言來決定使用哪個詞典。

PasswordBox

和TextBox類似,但是通過顯示圓圈符號字符串來屏蔽實際字符(可以通過設置PasswordChar屬性選擇不同的屏蔽字符),不支持剪切板,不能復制內部文本。

提供了MaxLength屬性,Clear(), Paste(), SelectAll() 方法,文本發生變化時觸發PasswordChanged時間。

列表控件

主要包含ListBox、ComboBox,以及ListView、TreeView、ToolBar控件。這些控件都繼承自ItemsControl類。ItemsControl類添加了所有基於列表的控件都是用的基本功能。最顯著的是,提供了填充列表的兩種方式。最直接的辦法是使用代碼或者XAML將列表項直接添加到Items集合中。使用數據綁定的形式,需要將ItemsSource屬性設置為希望顯示的具有數據項集合的對象。

ItemsControl類之后繼承有一些混亂,一個主要分支是選擇器Selector,包括ListBox、ComboBox以及TabControl,這些控件都繼承自Selector類,都具有跟蹤當前選擇項SelectItem或者選擇位置SelectIndex的屬性。另一個分支以不同方式選擇列表項,主要包括菜單、工具欄、樹。

ListBox

ListBox代表了最常用的列表項,允許用戶選擇其中一項。可以通過SelectionMode屬性設置選擇模式,Multiple(通過單擊項進行選擇或者取消選擇)、Extended(需要按下Ctrl鍵選擇其他項,或者按下Shift鍵選擇某個范圍)、Single(默認單選),可以通過SelectedItems集合或者SelectedItem屬性來獲取所有選擇項。

ListBox是一個非常靈活的控件,它不僅包含ListBoxItem對象,也可以駐留其他任意元素,因為ListBoxItem類繼承自ContentControl類,能夠嵌套內容。ListBoxItem對象會調用ToString方法並顯示最終的文本。

ComboBox

ComboBox控件和ListBox控件類似,該控件包含ComboBoxItem對象的集合,既可以顯式地也可以隱式地創建該集合。ComboBox也可以嵌套任何元素的內容控件。ComboBox控件使用下拉列表,一次只能選擇一項。

如果希望允許用戶在組合框中通過輸入文本選擇一項,就必須將IsEditable屬性設置為true,並且比偶徐確保選項集合中存儲的是普通的純文本的ComboBoxItem對象,或是提供有意義的ToString表示的對象。

ComboBox控件的局限之一在於當使用自動改變尺寸功能時該控件改變自身尺寸的方式。該控件加寬自身以適應它的內容,這意味着當從一項移動到另一項時它會改變自身大小,但沒有簡便的方法告訴ComboBox控件使用所包含項的最大尺寸。


免責聲明!

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



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