WPF:選擇器(selector)


  • 不但可以被索引而且可以被選擇。
  • 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),這樣就可以取消選擇所有的標簽頁。


免責聲明!

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



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