- 不但可以被索引而且可以被選擇。
- Selector 抽象類繼承自ItemsControl。
- SelectedIndex——非負的整型數,它表示哪個Item 被選擇了,如果沒有東西被選擇,則用1 表示。Item是根據被添加到集合中的順序來計數的。
- SelectedItem——當前被選中的Item 的實例。
- SelectedValue——當前被選中的Item 的值。默認情況下這個值是Item 本身,這時Selec- tedValue 與SelectedItem 是一樣的。通過設置SelectedValuePath 去選擇任意的屬性或者表達式,用來表示每個Item 的值(SelectedValuePath 與DisplayMemberPath 工作原理一樣)。
- IsSelected——可以用來判斷選擇或者未被選擇的Boolean 變量 (也可以用來獲得當前選擇的狀態)。
- IsSelectionActive—— 說明選擇的Item 是否擁有焦點的Boolean 變量。
- 定義了SelectionChanced 事件,它會監聽當前選擇內容是否被改變。
繼承自Selector 的控件:ComboBox、ListBox、ListView、TabControl
1、ComboBox
- 允許用戶從一個列表中選擇一個Item。
- 下拉框可以使用鼠標點擊或者Alt+Up、Alt+Down、F4 鍵來打開和關閉。
- 定義了兩個事件:DropDownOpened 和DropDownClosed,以及一個IsDropDownOpen 屬性,它們允許你在下拉框被打開或者關閉時進行操作。IsDropDownOpen 是一個可讀寫屬性,所以可以設置它來改變下拉框的狀態。
- ComboBox 允許用戶在選擇框里輸入任何文字。
- 把IsEditable 設置為true 就等於把ComboBox 的選擇框變為一個文本框。當選擇框是一個文本框時,被選擇的Item 只能以簡單字符串來顯示。
- 默認情況下,把IsEditable 設置為true,則以ToString 方式渲染選擇框。
- TextSearch.TextPath 屬性能被附加到ComboBox 上,把每個項的屬性(或者子屬性)作為選擇框的文字使用。
- TextSearch 的另一個附加屬性是Text 屬性,它更加靈活。但是必須被應用到ComboBox 的某個Item 上。可以在選擇框內把每一個項的Text 設置為想顯示的文字。如附件
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ComboBox Width="206" IsEditable="True"> <!-- Item #1 --> <StackPanel TextSearch.Text="Text1" Orientation="Horizontal" Margin="5"> <Image Source="CurtainCall.bmp"/> <StackPanel Width="200"> <TextBlock Margin="5,0" FontSize="14" FontWeight="Bold" VerticalAlignment="center">Curtain Call</TextBlock> <TextBlock Margin="5" VerticalAlignment="center" TextWrapping="Wrap"> Whimsical, with a red curtain background that represents a stage. </TextBlock> </StackPanel> </StackPanel> <!-- Item #2 --> <StackPanel TextSearch.Text="text2" Orientation="Horizontal" Margin="5"> <Image Source="Fireworks.bmp"/> <StackPanel Width="200"> <TextBlock Margin="5,0" FontSize="14" FontWeight="Bold" VerticalAlignment="center">Fireworks</TextBlock> <TextBlock Margin="5" VerticalAlignment="center" TextWrapping="Wrap"> Sleek, with a black sky containing fireworks. When you need to celebrate PowerPoint-style, this design is for you! </TextBlock> </StackPanel> </StackPanel> </ComboBox> </Canvas>
- SelectionChanged 事件:傳給事件處理程序的SelectionChangedEventArgs 類型有兩個IList 類型的屬性:AddedItems 和
RemovedItems。AddedItems 包含新的選擇,而RemovedItems 包含老的選擇。 - ComboBoxItem:ComboBoxItem 是一個內容控件。ComboBoxItem 提供了一些有用的屬性(IsSelected 與IsHighlighted)和一些有用的事件(Selected 與Unselected)。
2、ListBox
- ListBox 所有的項都直接在控件的邊界以內顯示(如果它們沒有都被顯示的話,也可以用滾動條去查看沒有顯示出來的項)。
- 對於同時發生的選擇操作的支持。通過SelectionMode 屬性可以控制這個特性,這個屬性接受3 個值(來自於SelectionMode 枚舉):
·Single(默認)——一次只能選擇一項,就像ComboBox 一樣。
·Mulle——可以同時選擇任何數目的項,點擊一個未選中的項將把它添加到ListBox 的Sel- ectedItems集合,而點擊一個選中的項會把它從集合里移除。
·Extended——任何數量的項可以被同時選中,但是這一行為是為單選情況所優化的。如果在這種模式下選擇多個項,點擊的時候必須按住Shift (連續的項)或者Ctrl(不連續的項)。該行為和Win32 ListBox控件一樣。 - ListBoxItem:定義了IsSelected 屬性以及Selected/Unselected 事件。
- TextSearch 技術
- 使ListBox 平穩地滾動:把ListBox 上的ScrollViewer.CanContentScroll 附加屬性設為false,同時會失去ListBox 的虛擬化(Virtualizat ion)功能。可能對數據綁定的性能產生負面影響。
- 在一個ListBox(或者其他的ItemControl)中排序:可以通過ItemsCollection 對象上的一種機制來完成排序,所以它也可以應用在所有ItemsControl 上。ItemsCollection 有一個SortDescriptions 屬性能保存任何數量的System.- ComponentModel.SortDescription 實例。每個SortDescription 描述哪一個屬性應該被用來排序,是升序還是降序。
3、ListView
- 從ListBox 繼承而來。
- ListView 添加一個叫作View 的屬性,它允許你把視圖定義為比選擇一個自定義的ItemsPanel 更豐富的樣子。
- View 屬性是ViewBase 類型,它是個抽象類。。WPF 有一個具體子類(concrete subclass),名字叫GridView,它和資源管理器的詳細視圖非常類似。自動支持一些資源管理器中詳細視圖(Detail view)的高級特性:
·通過拖拉列對列重新排序。
·拖動列的分隔器(separator)可以改變列尺寸。
·通過雙擊列的分隔器后,GridView 會根據當前內容來自動調整列尺寸。
4、TabControl
- 它可以在多個頁面之間進行切換。
- 通過使用TabControl 的TabStripPlacement 屬性(Dock 類型),可以把它的位置設為左邊、右邊或者下邊。
- TabItem:
- TabControl 的第1 個項默認是被選中的。你也可以用編程的方式把SelectedItem 設為null(或者把SelectedIndex 設置為1),這樣就可以取消選擇所有的標簽頁。