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),这样就可以取消选择所有的标签页。

posted on 2021-11-17 08:37  离线  阅读(1256)  评论(0编辑  收藏  举报

导航