WPF基础四:UI的相关类 (5)ItemsControl类

目录

2.5 条目控件

2.5.1 ContextMenu

2.5.2 ComboBox

2.5.3 DataGrid

2.5.4 ItemsControl

2.5.5 ListBox

2.5.6 ListView

2.5.7 MenuBase

2.5.8 Menu

2.5.9 Selector

2.5.10 TabControl

2.5.11 TreeView

2.5.12  MultiSelector


2.5 条目控件


2.5.1 ContextMenu

表示一个弹出菜单,该弹出菜单使控件能够公开特定于该控件的上下文的功能。

ContextMenu 为 ItemsControl ,这意味着它可以包含任何类型的对象的集合 (例如字符串、图像或面板) 。 有关更多信息,请参见 ItemsControl 类。

 ContextMenu 类的属性用于定义ContextMenu的位置和行为 。

FrameworkElement或 FrameworkContentElement 可以具有 ContextMenu 。 如果将分配 ContextMenu 给 FrameworkElement.ContextMenu 或 FrameworkContentElement.ContextMenu 属性,则类将 ContextMenuService 处理上下文菜单操作以响应用户交互。 ContextMenuService ContextMenu 当用户在控件上单击鼠标右键时,所做的工作就是打开。

以下属性由 ContextMenu 和 ContextMenuService 类定义。 如果在ContextMenu 和 ContextMenuService 上都设置了这些属性中的任何一个,则使用中ContextMenuService的属性值 。

  • Placement
  • PlacementRectangle
  • PlacementTargetProperty
  • HorizontalOffset
  • VerticalOffsetProperty
  • HasDropShadow

ContextMenu自动放置在 Popup 控件内。 此行为不能更改。

自定义 ContextMenu 控件

若要对多个ContextMenu 控件应用相同的属性设置 ,请使用 Style 属性。 您可以修改 ControlTemplate 默认值,为控件指定独特的外观。 有关创建 ControlTemplate 的详细信息,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于 ContextMenu 的部分和状态,请参阅 ContextMenu 样式和模板。

此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题。

只有视觉对象属性已存在于控件的默认模板中并且已使用 TemplateBinding 设置时,设置该属性才有效。 在通过创建 ControlTemplate 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。

    public class ContextMenu : MenuBase
    {
        public static readonly System.Windows.RoutedEvent ClosedEvent;
        public static readonly System.Windows.DependencyProperty CustomPopupPlacementCallbackProperty;
        public static readonly System.Windows.DependencyProperty HasDropShadowProperty;
        public static readonly System.Windows.DependencyProperty HorizontalOffsetProperty;
        public static readonly System.Windows.DependencyProperty IsOpenProperty;
        public static readonly System.Windows.RoutedEvent OpenedEvent;
        public static readonly System.Windows.DependencyProperty PlacementProperty;
        public static readonly System.Windows.DependencyProperty PlacementRectangleProperty;
        public static readonly System.Windows.DependencyProperty PlacementTargetProperty;
        public static readonly System.Windows.DependencyProperty StaysOpenProperty;
        public static readonly System.Windows.DependencyProperty VerticalOffsetProperty;

        //获取或设置一个回调,该回调指示 ContextMenu 应放在屏幕上的什么位置。
        public System.Windows.Controls.Primitives.CustomPopupPlacementCallback CustomPopupPlacementCallback { get; set; }

        //获取一个指示控件是否支持滚动的值。
        protected internal override bool HandlesScrolling { get; }

        //获取或设置一个值,该值指示上下文菜单显示时是否有投影。
        public bool HasDropShadow { get; set; }

        //获取或设置目标原点与弹出项对齐点之间的水平距离。
        public double HorizontalOffset { get; set; }

        //获取或设置一个值,该值指示 ContextMenu 是否可见。
        public bool IsOpen { get; set; }

        //获取或设置 Placement 的 ContextMenu 属性。
        public System.Windows.Controls.Primitives.PlacementMode Placement { get; set; }

        //获取或设置上下文菜单打开时与其所在位置相对的区域。
        public System.Windows.Rect PlacementRectangle { get; set; }

        //获取或设置 UIElement,当它打开时相对于它确定 ContextMenu 的位置。
        public System.Windows.UIElement PlacementTarget { get; set; }

        //获取或设置一个值,该值指示 ContextMenu 是否应自动关闭。
        public bool StaysOpen { get; set; }

        //获取或设置目标原点与弹出项对齐点之间的垂直距离。
        public double VerticalOffset { get; set; }

        //在 Closed 事件发生时调用。
        protected virtual void OnClosed(System.Windows.RoutedEventArgs e);

        //为此 ContextMenuAutomationPeer 创建并返回一个 ContextMenu 对象。
        protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer();

        //报告 IsKeyboardFocusWithin 属性已更改。
        protected override void OnIsKeyboardFocusWithinChanged(System.Windows.DependencyPropertyChangedEventArgs e);

        //在 KeyDown 中的对象引发 ContextMenu 事件时调用。
        protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e);

        //响应 KeyUp 事件。
        protected override void OnKeyUp(System.Windows.Input.KeyEventArgs e);

        //在 Opened 事件发生时调用。
        protected virtual void OnOpened(System.Windows.RoutedEventArgs e);

        //在上下文菜单的可视父级更改时调用。
        protected internal override void OnVisualParentChanged(System.Windows.DependencyObject oldParent);

        //准备好指定的元素以显示指定的项。
        protected override void PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item);

        //在 ContextMenu 的特定实例关闭时发生。
        public event System.Windows.RoutedEventHandler Closed;

        //在上下文菜单的特定实例打开时发生。
        public event System.Windows.RoutedEventHandler Opened;

       }

2.5.2 ComboBox

表示带有下拉列表的选择控件,通过单击控件上的箭头可显示或隐藏下拉列表。

ComboBox允许用户从下拉列表中选择项,或根据需要在控件的文本框中输入新文本。 

ComboBox 是 ItemsControl ,这意味着它可以包含任何类型的对象的集合 (例如字符串、图像或面板) 。 有关更多信息,请参见 ItemsControl 类。

IsEditable和 IsReadOnly 属性指定 ComboBox 用户执行以下操作之一时的行为方式:

  • 输入一个字符串以选择中的项 ComboBox 。
  • 输入不与中的项对应的字符串 ComboBox 。
  • 选择文本框中的字符串的一部分。
  • 将值复制或粘贴到文本框中。

下表描述了用户可以和不可以执行的操作,具体取决于IsEditable 和 IsReadOnly的值 。

注解
  IsReadOnly 为 true IsReadOnly 为 false
IsEditable 为 true -无法通过输入字符串选择中的项 ComboBox 。
-无法输入与中的项不对应的字符串 ComboBox 。
-可以在文本框中选择字符串的一部分 ComboBox 。
-可以复制文本框中的字符串 ComboBox ,但不能将字符串粘贴到文本框中 ComboBox 。
-可通过输入字符串在中选择一个项 ComboBox 。
-可以输入与中的项不对应的字符串 ComboBox 。
-可以在文本框中选择字符串的一部分 ComboBox 。
-可以复制或粘贴文本框中的字符串 ComboBox 。
IsEditable 为 false -可通过输入字符串在中选择一个项 ComboBox 。
-无法输入与中的项不对应的字符串 ComboBox 。
-无法选择中的部分字符串 ComboBox 。
-无法复制或粘贴中的字符串 ComboBox 。
-可通过输入字符串在中选择一个项 ComboBox 。
-无法输入与中的项不对应的字符串 ComboBox 。
-无法选择中的部分字符串 ComboBox 。
-无法复制或粘贴中的字符串 ComboBox 。

IsReadOnly仅当为时,IsEditable 属性才有效果 true 。

ComboBox是 ItemsControl ,因此它可以显示简单字符串以外的内容。 例如,你可以创建一个 ComboBox 包含映像列表的。 如果ComboBox 中的内容不是字符串,则在ComboBox 隐藏下拉列表时,过程字符串可能出现在中。 若要在 ComboBox 包含非字符串项时显示中的字符串,请使用 TextSearch.Text 或 TextSearch.TextPath 附加属性。

    public class ComboBox : Selector
    {
        public static readonly System.Windows.DependencyProperty IsDropDownOpenProperty;
        public static readonly System.Windows.DependencyProperty IsEditableProperty;
        public static readonly System.Windows.DependencyProperty IsReadOnlyProperty;
        public static readonly System.Windows.DependencyProperty MaxDropDownHeightProperty;
        public static readonly System.Windows.DependencyProperty SelectionBoxItemProperty;
        public static readonly System.Windows.DependencyProperty SelectionBoxItemStringFormatProperty;
        public static readonly System.Windows.DependencyProperty SelectionBoxItemTemplateProperty;
        public static readonly System.Windows.DependencyProperty ShouldPreserveUserEnteredPrefixProperty;
        public static readonly System.Windows.DependencyProperty StaysOpenOnEditProperty;
        public static readonly System.Windows.DependencyProperty TextProperty;

        //获取一个值,该值指示组合框是否支持滚动。
        protected internal override bool HandlesScrolling { get; }

        //获取一个值,该值指示 ComboBox 是否具有焦点。
        protected internal override bool HasEffectiveKeyboardFocus { get; }

        //获取或设置一个值,该值指示组合框的下拉部分当前是否打开。
        public bool IsDropDownOpen { get; set; }

        //获取或设置一个值,该值指示启用或禁用 ComboBox 的文本框中的文本编辑。
        public bool IsEditable { get; set; }

        //获取或设置启用仅限选择模式的值,在此模式中,可选择但不可编辑组合框中的内容
        public bool IsReadOnly { get; set; }

        //确定是否突出显示 SelectionBoxItem。
        public bool IsSelectionBoxHighlighted { get; }

        //获取或设置组合框下拉部分的最大高度。
        public double MaxDropDownHeight { get; set; }

        //获取在选择框中显示的项。
        public object SelectionBoxItem { get; }

        //获取一个撰写字符串,该字符串指定如果选择框中的选定项显示为字符串,应如何设置该选定项的格式。
        public string SelectionBoxItemStringFormat { get; }

        //获取选择框内容的项模板。
        public System.Windows.DataTemplate SelectionBoxItemTemplate { get; }

        //获取或设置指示 ComboBox 是保留用户的输入还是将输入替换为匹配的项的值。
        public bool ShouldPreserveUserEnteredPrefix { get; set; }

        //获取或设置已打开并显示下拉控件的 ComboBox 在用户单击 TextBox 时是否将保持打开状态。
        public bool StaysOpenOnEdit { get; set; }

        //获取或设置当前选定项的文本。
        public string Text { get; set; }

        //创建或标识用于显示指定项的元素。
        protected override System.Windows.DependencyObject GetContainerForItemOverride();

        //确定指定项是否是(或者是否可以作为)自己的 ItemContainer。
        protected override bool IsItemItsOwnContainerOverride(object item);

        //调用 ApplyTemplate() 时进行调用
        public override void OnApplyTemplate();

        //提供 ComboBoxAutomationPeer 此控件的适当实现,作为 WPF 基础结构的一部分
        protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer();

        //当组合框的弹出窗口关闭时报告。
        protected virtual void OnDropDownClosed(EventArgs e);

        //当组合框的弹出窗口打开时报告
        protected virtual void OnDropDownOpened(EventArgs e);

        //报告 IsKeyboardFocusWithin 属性已更改。
        protected override void OnIsKeyboardFocusWithinChanged(System.Windows.DependencyPropertyChangedEventArgs e);

        //当 IsMouseCaptured 属性更改时调用。
        protected override void OnIsMouseCapturedChanged(System.Windows.DependencyPropertyChangedEventArgs e);

        //在发生 KeyDown 附加路由事件时调用。
        protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e);

        //调用此方法以报告已释放鼠标左键。
        protected override void OnMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs e);

        //在发生 PreviewKeyDown 附加路由事件时调用。
        protected override void OnPreviewKeyDown(System.Windows.Input.KeyEventArgs e);

        //通过引发 ComboBox 事件来对 SelectionChanged 选择更改进行响应。
        protected override void OnSelectionChanged(System.Windows.Controls.SelectionChangedEventArgs e);

        //准备好指定的元素以显示指定的项。
        protected override void PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item);

        //当关闭组合框的下拉列表时发生。
        public event EventHandler DropDownClosed;

        //当打开组合框的下拉列表时发生。
        public event EventHandler DropDownOpened;
    }

2.5.3 DataGrid

表示用于在可自定义的网格中显示数据的控件。

DataGrid控件提供了一种灵活的方式来显示行和列中的数据集合。 DataGrid包括内置列类型和用于承载自定义内容的模板列。 内置行类型包括下拉详细信息部分,可用于显示单元值下面的附加内容。

若要将绑定 DataGrid 到数据,请将 ItemsSource 属性设置为 IEnumerable 实现。 数据网格中的每一行都绑定到数据源中的某个对象,数据网格中的每一列都绑定到该数据对象的属性。 为了使 DataGrid 用户界面在源数据中添加或删除项时自动更新, DataGrid 必须将绑定到实现接口的集合 INotifyCollectionChanged ,例如 ObservableCollection 。 若要自动反映属性更改,源集合中的对象必须实现 INotifyPropertyChanged 接口。 有关详细信息,请参阅 (WPF) 的数据绑定 。

默认情况下, DataGrid 当设置属性时,控件将自动生成列 ItemsSource 。 所生成的列的类型取决于列中数据的类型。 下表列出了生成的列类型。

Columns

 

生成的列类型 数据类型 DataGridTextColumn String DataGridCheckBoxColumn Boolean DataGridComboBoxColumn Enum DataGridHyperlinkColumn Uri

下图显示了每个列类型。

WPF基础四:UI的相关类 (5)ItemsControl类_第1张图片

自动生成列后,可以处理AutoGeneratingColumn事件以自定义或取消将列添加到DataGrid之前。如果将用户定义的列和自动生成的列都添加到DataGrid,则会首先添加用户定义的列。要重新排列列的显示顺序,可以为单个列设置DisplayIndex属性。

您可以通过将AutoGenerateColumns属性设置为false来防止自动生成列。如果要显式创建和配置所有列,这将很有用。

如果内置列类型不满足您的需求,请使用DataGridTemplateColumn类型定义自定义列。该DataGridTemplateColumn类型提供CellTemplate和CellEditingTemplate属性,使您可以指定显示和编辑模式的内容模板。例如,您可以为日期定义一个自定义列。所述CellTemplate可以定义一个的TextBlock以显示日期,而CellEditingTemplate可以定义一个的DatePicker控制到编辑的日期。

您可以使用Columns集合在运行时以编程方式添加,插入,删除和更改控件中的任何列。检查IsAutoGenerated属性,以确定列是自动生成的还是用户定义的。当ItemsSource更改时,将自动添加,删除或重新生成自动生成的列。

Selection

默认情况下,当用户单击DataGrid中的单元格时,将选择整行,并且用户可以选择多行。您可以设置SelectionUnit属性,以指定用户可以选择单元格,全行还是同时选择两者。设置SelectionMode属性以指定是选择多行还是单元格,还是仅选择单行或单元格。

您可以获取有关从SelectedCells属性中选择的单元格的信息。您可以在SelectedCellsChanged事件的SelectedCellsChangedEventArgs中获取有关其选择已更改的单元格的信息。调用SelectAllCells或UnselectAllCells方法以编程方式选择或取消选择所有单元格。有关更多信息,请参见DataGrid控件中的默认键盘和鼠标行为。

Grouping, Sorting, and Filtering

默认情况下,您可以通过单击列标题来对DataGrid中的项目进行排序。您可以通过处理Sorting事件来自定义排序。若要取消默认排序,请将Handled属性设置为true。您也可以先对源数据进行排序,然后再将其显示在DataGrid中。

要分组,排序,在和过滤数据的DataGrid,您绑定的DataGrid到ICollectionView实现支持这些操作。然后,您可以在集合视图上执行操作。在DataGrid中对项目进行分组时,可以定义一个GroupStyle来指定每个组的外观。您可以通过将GroupStyle添加到DataGrid的GroupStyle集合中来应用它。如果您有多个分组级别,则可以对每个分组级别应用不同的样式。样式按照定义的顺序应用。有关更多信息,请参见如何:在DataGrid控件中对数据进行分组,排序和过滤。

Editing

默认情况下,您可以直接在DataGrid中编辑项目。为了保证可以正确提交和取消编辑,DataGrid中的对象必须实现IEditableObject接口。或者,您可以将IsReadOnly属性设置为true,禁用DataGrid中的编辑。

对 DataGrid 以下编辑命令提供内置支持:

正在编辑
Command 默认输入绑定
BeginEditCommand F2
CancelEditCommand ESC
CommitEditCommand Enter
DeleteCommand DELETE

您可以通过单击或按F2将当前单元格置于编辑模式。当您移至同一行中的另一个单元格或在单元格处于编辑模式时按ENTER时,将提交单元格级别的编辑。当您移至另一行或在该行处于编辑模式时按ENTER时,将提交该行中的所有编辑。您可以通过按一次ESC取消单元格编辑,并通过两次按ESC取消连续的所有编辑。有关以编程方式提交和取消编辑的更多信息,请参见BeginEdit,CommitEdit和CancelEdit方法。有关与编辑相关的事件的更多信息,请参见BeginningEdit,PreparingCellForEdit,CellEditEnding和RowEditEnding。

设置CanUserAddRows和CanUserDeleteRows属性以指定用户是否可以添加或删除行。用户可以通过按DELETE键删除选定的行。如果CanUserAddRows属性设置为true,则将新的项目行添加为DataGrid中的最后一行。您可以通过处理InitializingNewItem事件为新项目设置默认值。

DataGrid使您能够在单元和行级别执行验证。 使用单元格级验证时,可以在用户更新值时验证绑定数据对象的各个属性。 通过行级验证,用户将更改提交到行时,可以验证整个数据对象。 您可以通过设置属性为行级验证错误提供自定义的可视反馈 RowValidationErrorTemplate ,也可以使用默认的错误指示器。 若要创建自定义验证规则,请创建一个派生自类的类 ValidationRule 并实现 Validate 方法。 将自定义验证规则添加到 RowValidationRules 集合。

是否允许编辑操作受多种其他因素的影响,包括DataGrid的IsReadOnly和IsEnabled状态,以及基础数据收集是否允许该操作。

Validation

通过DataGrid,您可以在单元格和行级别上执行验证。使用单元级验证,您可以在用户更新值时验证绑定数据对象的各个属性。使用行级验证,您可以在用户将更改提交到行时验证整个数据对象。您可以通过设置RowValidationErrorTemplate属性为行级验证错误提供自定义的视觉反馈,也可以使用默认错误指示符。若要创建自定义验证规则,请创建一个从ValidationRule类派生的类并实现Validate方法。将自定义验证规则添加到RowValidationRules集合。

自定义DataGrid控件

DataGrid控件支持公用表格式设置选项,如交替行背景和显示或隐藏标题、网格线和滚动条的功能。 此外,控件提供了若干样式和模板属性,您可以使用这些属性来完全更改控件及其行、列、标题和单元格的外观。

若要自定义 DataGrid 行为,可处理选定内容更改、单元格编辑和列重新排序的事件。 DataGrid还公开了若干行回收事件,您可以处理这些事件来自定义行。

若要对多个控件应用相同的属性设置 DataGrid ,请使用 Style 属性。 您可以修改ControlTemplate 默认值 ,为控件指定独特的外观。 有关创建 ControlTemplate 的详细信息,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于 DataGrid 的部分和状态,请参阅 DataGrid 样式和模板。

此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题。

常见任务

下表提供了有关通常与相关联的任务的信息 DataGrid 。

常见任务
任务 实现
设置交替行背景色 将 AlternationIndex 属性设置为2或更大,然后将分配给 Brush RowBackground 和 AlternatingRowBackground 属性。
定义单元格和行选择行为 设置 SelectionMode 和 SelectionUnit 属性。
自定义标题、单元和行的视觉外观 将新的应用于 Style ColumnHeaderStyle 、 RowHeaderStyle 、 CellStyle 或 RowStyle 属性。
设置大小调整选项 设置 Height 、、 MaxHeight 、 MinHeight Width 、 MaxWidth 或 MinWidth 属性。 有关详细信息,请参阅 DataGrid 控件中的调整大小选项。
访问选定项 检查 SelectedCells 属性以获取选定的单元格,并选中 SelectedItems 属性以获取选定的行。 有关更多信息,请参见 SelectedCells 属性。
自定义最终用户交互 设置 CanUserAddRows 、、 CanUserDeleteRows 、 CanUserReorderColumns CanUserResizeColumns 、 CanUserResizeRows 和 CanUserSortColumns 属性。
取消或更改自动生成的列 处理 AutoGeneratingColumn 事件。
冻结列 将 FrozenColumnCount 属性设置为1,并将该属性设置为0,将该列移到最左侧的位置 DisplayIndex 。
使用 XML 数据作为数据源 将 ItemsSource 上的绑定 DataGrid 到表示项集合的 XPath 查询。 在中创建每个列 DataGrid 。 绑定每一列,方法是将绑定上的 XPath 设置为可获取项源属性的查询。 有关示例,请参见 DataGridTextColumn。
将项分组 绑定到 CollectionView CollectionViewSource 支持分组的或。 有关详细信息,请参阅 如何:在 DataGrid 控件中对数据进行分组、排序和筛选。
显示行的详细信息部分 定义 RowDetailsTemplate 以指定详细信息部分的外观。 设置 RowDetailsVisibilityMode 以指定显示详细信息部分的时间。 有关详细信息,请参阅 如何:向 DataGrid 控件添加行详细信息。
    public class DataGrid : MultiSelector
    {
        public static readonly System.Windows.DependencyProperty AlternatingRowBackgroundProperty;
        public static readonly System.Windows.DependencyProperty AreRowDetailsFrozenProperty;
        public static readonly System.Windows.DependencyProperty AutoGenerateColumnsProperty;
        public static readonly System.Windows.Input.RoutedCommand BeginEditCommand;
        public static readonly System.Windows.Input.RoutedCommand CancelEditCommand;
        public static readonly System.Windows.DependencyProperty CanUserAddRowsProperty;
        public static readonly System.Windows.DependencyProperty CanUserDeleteRowsProperty;
        public static readonly System.Windows.DependencyProperty CanUserReorderColumnsProperty;
        public static readonly System.Windows.DependencyProperty CanUserResizeColumnsProperty;
        public static readonly System.Windows.DependencyProperty CanUserResizeRowsProperty;
        public static readonly System.Windows.DependencyProperty CanUserSortColumnsProperty;
        public static readonly System.Windows.DependencyProperty CellsPanelHorizontalOffsetProperty;
        public static readonly System.Windows.DependencyProperty CellStyleProperty;
        public static readonly System.Windows.DependencyProperty ClipboardCopyModeProperty;
        public static readonly System.Windows.DependencyProperty ColumnHeaderHeightProperty;
        public static readonly System.Windows.DependencyProperty ColumnHeaderStyleProperty;
        public static readonly System.Windows.DependencyProperty ColumnWidthProperty;
        public static readonly System.Windows.Input.RoutedCommand CommitEditCommand;
        public static readonly System.Windows.DependencyProperty CurrentCellProperty;
        public static readonly System.Windows.DependencyProperty CurrentColumnProperty;
        public static readonly System.Windows.DependencyProperty CurrentItemProperty;
        public static readonly System.Windows.DependencyProperty DragIndicatorStyleProperty;
        public static readonly System.Windows.DependencyProperty DropLocationIndicatorStyleProperty;
        public static readonly System.Windows.DependencyProperty EnableColumnVirtualizationProperty;
        public static readonly System.Windows.DependencyProperty EnableRowVirtualizationProperty;
        public static readonly System.Windows.DependencyProperty FrozenColumnCountProperty;
        public static readonly System.Windows.DependencyProperty GridLinesVisibilityProperty;
        public static readonly System.Windows.DependencyProperty HeadersVisibilityProperty;
        public static readonly System.Windows.DependencyProperty HorizontalGridLinesBrushProperty;
        public static readonly System.Windows.DependencyProperty HorizontalScrollBarVisibilityProperty;
        public static readonly System.Windows.DependencyProperty IsReadOnlyProperty;
        public static readonly System.Windows.DependencyProperty MaxColumnWidthProperty;
        public static readonly System.Windows.DependencyProperty MinColumnWidthProperty;
        public static readonly System.Windows.DependencyProperty MinRowHeightProperty;
        public static readonly System.Windows.DependencyProperty NewItemMarginProperty;
        public static readonly System.Windows.DependencyProperty NonFrozenColumnsViewportHorizontalOffsetProperty;
        public static readonly System.Windows.DependencyProperty RowBackgroundProperty;
        public static readonly System.Windows.DependencyProperty RowDetailsTemplateProperty;
        public static readonly System.Windows.DependencyProperty RowDetailsTemplateSelectorProperty;
        public static readonly System.Windows.DependencyProperty RowDetailsVisibilityModeProperty;
        public static readonly System.Windows.DependencyProperty RowHeaderActualWidthProperty;
        public static readonly System.Windows.DependencyProperty RowHeaderStyleProperty;
        public static readonly System.Windows.DependencyProperty RowHeaderTemplateProperty;
        public static readonly System.Windows.DependencyProperty RowHeaderTemplateSelectorProperty;
        public static readonly System.Windows.DependencyProperty RowHeaderWidthProperty;
        public static readonly System.Windows.DependencyProperty RowHeightProperty;
        public static readonly System.Windows.DependencyProperty RowStyleProperty;
        public static readonly System.Windows.DependencyProperty RowStyleSelectorProperty;
        public static readonly System.Windows.DependencyProperty RowValidationErrorTemplateProperty;
        public static readonly System.Windows.DependencyProperty SelectionModeProperty;
        public static readonly System.Windows.DependencyProperty SelectionUnitProperty;
        public static readonly System.Windows.DependencyProperty VerticalGridLinesBrushProperty;
        public static readonly System.Windows.DependencyProperty VerticalScrollBarVisibilityProperty;

        //获取或设置在可选行上使用的背景画笔。
        public System.Windows.Media.Brush AlternatingRowBackground { get; set; }

        //获取或设置一个值,该值指示是否能水平滚动行详细信息。
        public bool AreRowDetailsFrozen { get; set; }

        //获取或设置一个值,该值指示是否自动创建列。
        public bool AutoGenerateColumns { get; set; }

        //获取或设置一个值,该值指示用户是否可在 DataGrid 中添加新行。
        public bool CanUserAddRows { get; set; }

        //获取或设置一个值,该值指示用户是否可从 DataGrid 中删除行。
        public bool CanUserDeleteRows { get; set; }

        //获取或设置一个值,该值指示用户能否通过用鼠标拖动列标题来更改列的显示顺序。
        public bool CanUserReorderColumns { get; set; }

        //获取或设置一个值,该值指示用户是否可使用鼠标调整列宽。
        public bool CanUserResizeColumns { get; set; }

        //获取或设置一个值,该值指示用户是否能使用鼠标调整行的高度。
        public bool CanUserResizeRows { get; set; }

        //获取或设置一个值,该值指示用户能否通过单击列标题对列进行排序。
        public bool CanUserSortColumns { get; set; }

        //获取 DataGridCellsPanel 的水平偏移量。
        public double CellsPanelHorizontalOffset { get; }

        //获取或设置应用于 DataGrid 中的所有单元格的样式。
        public System.Windows.Style CellStyle { get; set; }

        //获取或设置一个值,该值指示如何将内容复制到剪贴板。
        public System.Windows.Controls.DataGridClipboardCopyMode ClipboardCopyMode { get; set; }

        //获取或设置列标题行的高度
        public double ColumnHeaderHeight { get; set; }

        //获取或设置应用于 DataGrid 中所有列标题的样式。
        public System.Windows.Style ColumnHeaderStyle { get; set; }

        //获取一个集合,该集合包含 DataGrid 中的所有列。
        public System.Collections.ObjectModel.ObservableCollection Columns { get; }

        //获取或设置 DataGrid 中列和标题的标准宽度和大小调整模式。
        public System.Windows.Controls.DataGridLength ColumnWidth { get; set; }

        //获取或设置具有焦点的单元格。
        public System.Windows.Controls.DataGridCellInfo CurrentCell { get; set; }

        //获取或设置包含当前单元格的列。
        public System.Windows.Controls.DataGridColumn CurrentColumn { get; set; }

        //获取与包含当前单元格的行绑定的数据项。
        public object CurrentItem { get; set; }

        //表示命令,该命令指示删除当前行的意图。
        public static System.Windows.Input.RoutedUICommand DeleteCommand { get; }

        //获取或设置在呈现拖动列标题时显示的拖动指示器时使用的样式。
        public System.Windows.Style DragIndicatorStyle { get; set; }

        //获取或设置在拖动列标题时应用以指示放置位置的样式。
        public System.Windows.Style DropLocationIndicatorStyle { get; set; }

        //获取或设置一个值,该值指示是否启用列虚拟化
        public bool EnableColumnVirtualization { get; set; }

        //获取或设置一个值,该值指示是否启用行虚拟化。
        public bool EnableRowVirtualization { get; set; }

        //获取用于引用带焦点单元格的默认边框画笔的键。
        public static System.Windows.ComponentResourceKey FocusBorderBrushKey { get; }

        //获取或设置非滚动列的数目。
        public int FrozenColumnCount { get; set; }

        //获取或设置一个值,该值指示显示哪些网格线。
        public System.Windows.Controls.DataGridGridLinesVisibility GridLinesVisibility { get; set; }

        //获取一个值,该值指示 DataGrid 是否支持自定义键盘滚动。
        protected internal override bool HandlesScrolling { get; }

        //获取或设置用于指定行和列标题可见性的值。
        public System.Windows.Controls.DataGridHeadersVisibility HeadersVisibility { get; set; }

        //获取用于将 DataGridHeadersVisibility 转换为 Visibility 的转换器。
        public static System.Windows.Data.IValueConverter HeadersVisibilityConverter { get; }

        //获取或设置用于绘制水平网格线的画笔。
        public System.Windows.Media.Brush HorizontalGridLinesBrush { get; set; }

        //获取或设置一个指示如何在 DataGrid 中显示水平滚动条的值。
        public System.Windows.Controls.ScrollBarVisibility HorizontalScrollBarVisibility { get; set; }

        //获取或设置一个值,该值指示用户是否可在 DataGrid 中的编辑值。
        public bool IsReadOnly { get; set; }

        //获取或设置 DataGrid 中列和标题的最大宽度约束。
        public double MaxColumnWidth { get; set; }

        //获取或设置 DataGrid 中列和标题的最小宽度约束。
        public double MinColumnWidth { get; set; }

        //获取或设置 DataGrid 中行和标题的最小高度约束。
        public double MinRowHeight { get; set; }

        //获取或设置新项行的边距。
        public System.Windows.Thickness NewItemMargin { get; }

        //获取视区中可滚动列的水平偏移量。
        public double NonFrozenColumnsViewportHorizontalOffset { get; }

        //获取或设置行背景的默认画笔。
        public System.Windows.Media.Brush RowBackground { get; set; }

        //获取用于将布尔值转换为 SelectiveScrollingOrientation 的转换器。
        public static System.Windows.Data.IValueConverter RowDetailsScrollingConverter { get; }

        //获取或设置用于显示行详细信息的模板。
        public System.Windows.DataTemplate RowDetailsTemplate { get; set; }

        //获取或设置用于行详细信息的模板选择器。
        public System.Windows.Controls.DataTemplateSelector RowDetailsTemplateSelector { get; set; }

        //获取或设置一个值,该值指示何时显示行的详细信息部分。
        public System.Windows.Controls.DataGridRowDetailsVisibilityMode RowDetailsVisibilityMode { get; set; }

        //获取行标题列的呈现宽度。
        public double RowHeaderActualWidth { get; }

        //获取或设置应用于所有行标题的样式。
        public System.Windows.Style RowHeaderStyle { get; set; }

        //获取或设置行标题的模板。
        public System.Windows.DataTemplate RowHeaderTemplate { get; set; }

        //获取或设置行标题的模板选择器。
        public System.Windows.Controls.DataTemplateSelector RowHeaderTemplateSelector { get; set; }

        //获取或设置行标题列的宽度。
        public double RowHeaderWidth { get; set; }

        //获取或设置所有行的建议高度。
        public double RowHeight { get; set; }

        //获取或设置应用于所有行的样式。
        public System.Windows.Style RowStyle { get; set; }

        //获取或设置行的样式选择器。
        public System.Windows.Controls.StyleSelector RowStyleSelector { get; set; }

        //获取或设置用来以可视方式指示行验证中的错误的模板。
        public System.Windows.Controls.ControlTemplate RowValidationErrorTemplate { get; set; }

        //获取用于验证每个行中的数据的规则。
        public System.Windows.Controls.ControlTemplate RowValidationErrorTemplate { get; set; }

        //表示命令,该命令指示在 DataGrid 中选择所有单元格的意图。
        public static System.Windows.Input.RoutedUICommand SelectAllCommand { get; }

        //获取当前选定单元格的列表。
        public System.Collections.Generic.IList SelectedCells { get; }

        //获取或设置一个值,该值指示如何在 DataGrid 中选择行和单元格。
        public System.Windows.Controls.DataGridSelectionMode SelectionMode { get; set; }

        //获取或设置一个值,该值指示是否可以在 DataGrid 中选择行、单元格或两者。
        public System.Windows.Controls.DataGridSelectionUnit SelectionUnit { get; set; }

        //获取或设置用于绘制垂直网格线的画笔。
        public System.Windows.Media.Brush VerticalGridLinesBrush { get; set; }

        //获取或设置一个指示如何在 DataGrid 中显示垂直滚动条的值。
        public System.Windows.Controls.ScrollBarVisibility VerticalScrollBarVisibility { get; set; }

        //调用 BeginEdit() 命令,该命令将当前单元格或行置于编辑模式。
        public bool BeginEdit(System.Windows.RoutedEventArgs editingEventArgs);
        public bool BeginEdit();

        //为当前处于编辑模式的单元格或行调用 CancelEditCommand 命令。
        public bool CancelEdit();
        public bool CancelEdit(System.Windows.Controls.DataGridEditingUnit editingUnit);

        //为指定项卸载行。
        protected override void ClearContainerForItemOverride(System.Windows.DependencyObject element, object item);

        //清除表示所指定数据项的 DetailsVisibility 的 DataGridRow 属性。
        public void ClearDetailsVisibilityForItem(object item);

        //获取位于指定索引处的 DataGridColumn。
        public System.Windows.Controls.DataGridColumn ColumnFromDisplayIndex(int displayIndex);

        //为当前处于编辑模式的单元格或行调用 CommitEditCommand 命令。
        public bool CommitEdit();
        public bool CommitEdit(System.Windows.Controls.DataGridEditingUnit editingUnit, bool exitEditingMode);

        //生成对象指定属性的列。
        public static System.Collections.ObjectModel.Collection GenerateColumns(System.ComponentModel.IItemProperties itemProperties);

        //实例化一个新的 DataGridRow。
        protected override System.Windows.DependencyObject GetContainerForItemOverride();

        //获取表示指定的数据项的 DetailsVisibility 的 DataGridRow 属性。
        public System.Windows.Visibility GetDetailsVisibilityForItem(object item);

        //确定项是否为 DataGridRow。
        protected override bool IsItemItsOwnContainerOverride(object item);

        //确定 DataGrid 的所需大小
        protected override System.Windows.Size MeasureOverride(System.Windows.Size availableSize);

        //引发 AddingNewItem 事件。
        protected virtual void OnAddingNewItem(System.Windows.Controls.AddingNewItemEventArgs e);

        //每次应用程序代码或内部进程调用 ApplyTemplate() 时,都将调用此方法。
        public override void OnApplyTemplate();

        //引发 AutoGeneratedColumns 事件。
        protected virtual void OnAutoGeneratedColumns(EventArgs e);

        //引发 AutoGeneratingColumn 事件。
        protected virtual void OnAutoGeneratingColumn(System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs e);

        //引发 BeginningEdit 事件。
        protected virtual void OnBeginningEdit(System.Windows.Controls.DataGridBeginningEditEventArgs e);

        //为与 CanExecute 命令关联的 BeginEditCommand 事件提供处理。
        protected virtual void OnCanExecuteBeginEdit(System.Windows.Input.CanExecuteRoutedEventArgs e);

        //为与 CanExecute 命令关联的 CancelEditCommand 事件提供处理。
        protected virtual void OnCanExecuteCancelEdit(System.Windows.Input.CanExecuteRoutedEventArgs e);

        //为与 CanExecute 命令关联的 CommitEditCommand 事件提供处理。
        protected virtual void OnCanExecuteCommitEdit(System.Windows.Input.CanExecuteRoutedEventArgs e);

        //为与 CanExecute 命令关联的 Copy 事件提供处理。
        protected virtual void OnCanExecuteCopy(System.Windows.Input.CanExecuteRoutedEventArgs args);

        //为与 CanExecute 命令关联的 DeleteCommand 事件提供处理。
        protected virtual void OnCanExecuteDelete(System.Windows.Input.CanExecuteRoutedEventArgs e);

        //引发 CellEditEnding 事件。
        protected virtual void OnCellEditEnding(System.Windows.Controls.DataGridCellEditEndingEventArgs e);

        //引发 ColumnDisplayIndexChanged 事件。
        protected virtual void OnCellEditEnding(System.Windows.Controls.DataGridCellEditEndingEventArgs e);

        //引发 ColumnHeaderDragCompleted 事件。
        protected internal virtual void OnColumnHeaderDragCompleted(System.Windows.Controls.Primitives.DragCompletedEventArgs e);

        //引发 ColumnHeaderDragDelta 事件。
        protected internal virtual void OnColumnHeaderDragDelta(System.Windows.Controls.Primitives.DragDeltaEventArgs e);

        //引发 ColumnHeaderDragStarted 事件。
        protected internal virtual void OnColumnHeaderDragStarted(System.Windows.Controls.Primitives.DragStartedEventArgs e);

        //引发 ColumnReordered 事件。
        protected internal virtual void OnColumnReordered(System.Windows.Controls.DataGridColumnEventArgs e);

        //引发 ColumnReordering 事件
        protected internal virtual void OnColumnReordering(System.Windows.Controls.DataGridColumnReorderingEventArgs e);

        //如果单元格上下文菜单已打开,则选择该单元格。
        protected override void OnContextMenuOpening(System.Windows.Controls.ContextMenuEventArgs e);

        //引发 CopyingRowClipboardContent 事件。
        protected virtual void OnCopyingRowClipboardContent(System.Windows.Controls.DataGridRowClipboardEventArgs args);

        //返回此 DataGrid 的自动化对等方。
        protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer();

        //引发 CurrentCellChanged 事件
        protected virtual void OnCurrentCellChanged(EventArgs e);

        //为与 Executed 命令关联的 BeginEditCommand 事件提供处理。
        protected virtual void OnExecutedBeginEdit(System.Windows.Input.ExecutedRoutedEventArgs e);

        //为与 Executed 命令关联的 CancelEditCommand 事件提供处理。
        protected virtual void OnExecutedCancelEdit(System.Windows.Input.ExecutedRoutedEventArgs e);

        //为与 Executed 命令关联的 CommitEditCommand 事件提供处理。
        protected virtual void OnExecutedCommitEdit(System.Windows.Input.ExecutedRoutedEventArgs e);

        //为与 Executed 命令关联的 Copy 事件提供处理。
        protected virtual void OnExecutedCopy(System.Windows.Input.ExecutedRoutedEventArgs args);

        //为与 Executed 命令关联的 DeleteCommand 事件提供处理。
        protected virtual void OnExecutedDelete(System.Windows.Input.ExecutedRoutedEventArgs e);

        //引发 InitializingNewItem 事件。
        protected virtual void OnInitializingNewItem(System.Windows.Controls.InitializingNewItemEventArgs e);

        //在此元素的 IsMouseCaptured 属性更改时调用。
        protected override void OnIsMouseCapturedChanged(System.Windows.DependencyPropertyChangedEventArgs e);

        //当项更改时执行列的自动生成并更新验证标志。
        protected override void OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e);

        // ItemsSource 属性更改时调用。
        protected override void OnItemsSourceChanged(System.Collections.IEnumerable oldValue, System.Collections.IEnumerable newValue);

        //在接收到 KeyDown 事件时调用。
        protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e);

        //引发 LoadingRow 事件。
        protected virtual void OnLoadingRow(System.Windows.Controls.DataGridRowEventArgs e);

        //引发 LoadingRowDetails 事件。
        protected virtual void OnLoadingRowDetails(System.Windows.Controls.DataGridRowDetailsEventArgs e);

        //更新由于用户在 DataGrid 中拖动鼠标而选定的项的集合。
        protected override void OnMouseMove(System.Windows.Input.MouseEventArgs e);

        //引发 PreparingCellForEdit 事件。
        protected internal virtual void OnPreparingCellForEdit(System.Windows.Controls.DataGridPreparingCellForEditEventArgs e);

        //引发 RowDetailsVisibilityChanged 事件。
        protected internal virtual void OnRowDetailsVisibilityChanged(System.Windows.Controls.DataGridRowDetailsEventArgs e);

        //引发 RowEditEnding 事件。
        protected virtual void OnRowEditEnding(System.Windows.Controls.DataGridRowEditEndingEventArgs e);

        //引发 SelectedCellsChanged 事件。
        protected virtual void OnSelectedCellsChanged(System.Windows.Controls.SelectedCellsChangedEventArgs e);

        //当选择更改时调用。
        protected override void OnSelectionChanged(System.Windows.Controls.SelectionChangedEventArgs e);

        //引发 Sorting 事件。
        protected virtual void OnSorting(System.Windows.Controls.DataGridSortingEventArgs eventArgs);

        //每当 DataGrid 的模板发生更改时调用。
        protected override void OnTemplateChanged(System.Windows.Controls.ControlTemplate oldTemplate, System.Windows.Controls.ControlTemplate newTemplate);

        //提供用于 TextInput 路由事件的类处理。
        protected override void OnTextInput(System.Windows.Input.TextCompositionEventArgs e);

        //引发 UnloadingRow 事件。
        protected virtual void OnUnloadingRow(System.Windows.Controls.DataGridRowEventArgs e);

        //引发 UnloadingRowDetails 事件。
        protected virtual void OnUnloadingRowDetails(System.Windows.Controls.DataGridRowDetailsEventArgs e);

        //为指定项准备新行。
        protected override void PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item);

        //将 DataGrid 垂直和水平滚动,以显示指定项。
        public void ScrollIntoView(object item);
        public void ScrollIntoView(object item, System.Windows.Controls.DataGridColumn column);

        //选择 DataGrid 中的所有单元格。
        public void SelectAllCells();

        //为包含指定对象的 DetailsVisibility 设置 DataGridRow 属性的值。
        public void SetDetailsVisibilityForItem(object item, System.Windows.Visibility detailsVisibility);

        //取消选择 DataGrid 中的所有单元格。
        public void UnselectAllCells();

        //在将项添加到 DataGrid 前发生。
        public event EventHandler AddingNewItem;

        //在完成所有列的自动生成操作时发生。
        public event EventHandler AutoGeneratedColumns;

        //在自动生成了单独的列时发生。
        public event EventHandler AutoGeneratingColumn;

        //在行或单元格进入编辑模式之前发生。
        public event EventHandler BeginningEdit;

        //在提交或取消单元格编辑之前发生。
        public event EventHandler CellEditEnding;

        //在某一列的 DisplayIndex 属性更改时发生。
        public event EventHandler ColumnDisplayIndexChanged;

        //在用户使用鼠标拖动列标题后释放列标题时发生。
        public event EventHandler ColumnHeaderDragCompleted;

        //每次当鼠标位置在用户拖动列标题时发生更改时发生。
        public event EventHandler ColumnHeaderDragDelta;

        //在用户使用鼠标开始拖动列标题时发生。
        public event EventHandler ColumnHeaderDragStarted;

        //在列移至显示顺序中的新位置时发生。
        public event EventHandler ColumnReordered;

        //在列移至显示顺序中的新位置之前发生。
        public event EventHandler ColumnReordering;

        //在默认行内容准备好之后发生。
        public event EventHandler CopyingRowClipboardContent;

        //在 CurrentCell 属性的值更改后发生。
        public event EventHandler CurrentCellChanged;

        //在创建新项时发生。
        public event System.Windows.Controls.InitializingNewItemEventHandler InitializingNewItem;

        //当实例化 DataGridRow 之后发生,以便您可以在使用它之前先进行自定义。
        public event EventHandler LoadingRow;

        //当新的行详细信息模板应用到行时发生。
        public event EventHandler LoadingRowDetails;

        //在单元格进入编辑模式时发生。
        public event EventHandler PreparingCellForEdit;

        //在行详细信息元素的可见性更改时发生。
        public event EventHandler RowDetailsVisibilityChanged;

        //在提交或取消行编辑之前发生。
        public event EventHandler RowEditEnding;

        //当 SelectedCells 集合更改时发生。
        public event System.Windows.Controls.SelectedCellsChangedEventHandler SelectedCellsChanged;

        //对列进行排序时发生。
        public event System.Windows.Controls.DataGridSortingEventHandler Sorting;

        //当 DataGridRow 对象变得可供重用时发生。
        public event EventHandler UnloadingRow;

        //当行详细信息元素变得可供重用时发生。
        public event EventHandler UnloadingRowDetails;        
    }

2.5.4 ItemsControl

表示可用于呈现一组项的控件。

ItemsControl是 Control 可包含多个项的类型,如字符串、对象或其他元素。 下图显示了一个 ListBox 控件,该控件包含以下不同类型的项:

  • 一个字符串。
  • DateTime 对象。
  • UIElement 对象。
  • 一个 Panel 包含 Ellipse 和的控件 TextBlock 。

WPF基础四:UI的相关类 (5)ItemsControl类_第2张图片
包含多种类型对象的 ListBox

使用 Items 或 ItemsSource 属性来指定要用于生成的内容的集合 ItemsControl 。 可以将ItemsSource 属性设置 为任何实现 IEnumerable 的类型。 ItemsSource 通常用于显示数据集合或将绑定 ItemsControl 到集合对象。

如果你不希望使用实现 IEnumerable 的对象来填充 ItemsControl ,则可以通过使用属性添加项 Items 。  ItemsControl 中的项可以具有不同的类型。 例如, ListBox 可以包含一个作为字符串的项以及另一个为 Image 的项。

如果 ItemsSource 设置了属性,则 Items 集合设置为只读且固定大小。 这意味着不能直接向集合中添加项。使用 ItemsSource时,将属性设置为可 null 删除集合并还原为 Items,并将使用空的ItemCollection 。

每个 ItemsControl 类型都有一个对应的项容器类型。 每个 ItemsControl 的对应项容器都追加 Item 到其名称。 例如,对于 ListBox ,项容器是 ListBoxItem 控件; 对于 ComboBox ,它们是 ComboBoxItem 控件。 可以为 ItemsControl 中的每个项显式创建容器类型,但这并不是必需的。 如果未显式创建容器类型,则会生成一个包含项集合中的数据项的。 例如,如果将字符串对象的集合绑定到 ListBox的 ItemsSource 属性 ,则不会显式创建 ListBoxItem 对象,但 ListBox 将为每个字符串生成一个对象。 可以通过使用 ItemContainerGenerator 属性访问生成的项容器。当包含重复对象时,UI 自动化的某些功能


当ItemsControl包含重复的对象时,UI Automation的某些功能将无法正常工作。 如果一个对象出现多次,则只有第一个实例出现在自动化树中。 (if Object.Equals(x,y),returns true,则两个对象x和y被视为重复。)当ItemsControl使用对象x时,x.GetHashCode()返回的值不得更改。 不支持对此值进行更改,并导致无法预料的行为。

此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题。

    public class ItemsControl : Control, IAddChild, IGeneratorHost, IContainItemStorage
    {
        public static readonly System.Windows.DependencyProperty AlternationCountProperty;
        public static readonly System.Windows.DependencyProperty AlternationIndexProperty;
        public static readonly System.Windows.DependencyProperty DisplayMemberPathProperty;
        public static readonly System.Windows.DependencyProperty GroupStyleSelectorProperty;
        public static readonly System.Windows.DependencyProperty HasItemsProperty;
        public static readonly System.Windows.DependencyProperty IsGroupingProperty;
        public static readonly System.Windows.DependencyProperty IsTextSearchCaseSensitiveProperty;
        public static readonly System.Windows.DependencyProperty IsTextSearchEnabledProperty;
        public static readonly System.Windows.DependencyProperty ItemBindingGroupProperty;
        public static readonly System.Windows.DependencyProperty ItemContainerStyleProperty;
        public static readonly System.Windows.DependencyProperty ItemContainerStyleSelectorProperty;
        public static readonly System.Windows.DependencyProperty ItemsPanelProperty;
        public static readonly System.Windows.DependencyProperty ItemsSourceProperty;
        public static readonly System.Windows.DependencyProperty ItemStringFormatProperty;
        public static readonly System.Windows.DependencyProperty ItemTemplateProperty;
        public static readonly System.Windows.DependencyProperty ItemTemplateSelectorProperty;

        //获取或设置 ItemsControl 中的交替项容器的数目,该控件可使交替容器具有唯一外观。
        public int AlternationCount { get; set; }

        //获取或设置源对象上的值的路径,以用作对象的可视表示形式。
        public string DisplayMemberPath { get; set; }

        //获取定义每个级别的组的外观的 GroupStyle 对象集合。
        public System.Collections.ObjectModel.ObservableCollection GroupStyle { get; }

        //获取或设置一个方法,通过此方法您可以为 GroupStyle 提供自定义选择逻辑,以便将此样式应用到集合中的每个组。
        public System.Windows.Controls.GroupStyleSelector GroupStyleSelector { get; set; }

        //获取一个值,该值指示 ItemsControl 是否包含项。
        public bool HasItems { get; }

        //获取一个值,该值指示控件是否正在使用分组。
        public bool IsGrouping { get; }

        //获取或设置一个值,该值指示搜索项时大小写是否为条件。
        public bool IsTextSearchCaseSensitive { get; set; }

        //获取或设置一个值,该值指示是否在 ItemsControl 实例上启用 TextSearch。
        public bool IsTextSearchEnabled { get; set; }

        //获取或设置复制到 ItemsControl 中每个项的 BindingGroup。
        public System.Windows.Data.BindingGroup ItemBindingGroup { get; set; }

        //获取与控件关联的 ItemContainerGenerator。
         public System.Windows.Controls.ItemContainerGenerator ItemContainerGenerator { get; }

        //获取或设置应用于为每个项生成的容器元素的 Style。
        public System.Windows.Style ItemContainerStyle { get; set; }

        //获取或设置可应用于每个所生成容器元素的样式的自定义样式选择逻辑。
        public System.Windows.Controls.StyleSelector ItemContainerStyleSelector { get; set; }

        //获取用于生成 ItemsControl 的内容的集合。
        public System.Windows.Controls.ItemCollection Items { get; }

        //获取或设置模板,该模板定义对项的布局进行控制的面板。
        public System.Windows.Controls.ItemsPanelTemplate ItemsPanel { get; set; }

        //获取或设置用于生成 ItemsControl 的内容的集合。
        public System.Collections.IEnumerable ItemsSource { get; set; }

        //获取或设置一个复合字符串,如果 ItemsControl 中的项显示为字符串,则用于指定如何格式化这些项。
        public string ItemStringFormat { get; set; }

        //获取或设置用来显示每个项的 DataTemplate。
        public System.Windows.DataTemplate ItemTemplate { get; set; }

        //获取或设置用于选择用来显示每个项的模板的自定义逻辑。
        public System.Windows.Controls.DataTemplateSelector ItemTemplateSelector { get; set; }

        //获取 ItemsControl 对象的逻辑子对象的枚举器。
        protected internal override System.Collections.IEnumerator LogicalChildren { get; }

        //将指定的对象作为 ItemsControl 对象的子级添加。
        protected virtual void AddChild(object value);

        //将指定文本字符串添加到 ItemsControl 对象。
        protected virtual void AddText(string text);

        //指示 ItemsControl 对象的初始化即将开始。
        public override void BeginInit();

        //当在派生类中重写时,撤消 PrepareContainerForItemOverride(DependencyObject, Object) 方法的效果。
        protected virtual void ClearContainerForItemOverride(System.Windows.DependencyObject element, object item);

        //返回属于拥有给定容器元素的当前 ItemsControl 的容器。
        public System.Windows.DependencyObject ContainerFromElement(System.Windows.DependencyObject element);
        public static System.Windows.DependencyObject ContainerFromElement(System.Windows.Controls.ItemsControl itemsControl, System.Windows.DependencyObject element);

        //表示对象 ItemsControl 的初始化已完成。
        public override void EndInit();

        //获取指定对象的 AlternationIndex。
        public static int GetAlternationIndex(System.Windows.DependencyObject element);

        //创建或标识用于显示给定项的元素。
        protected virtual System.Windows.DependencyObject GetContainerForItemOverride();

        //返回指定元素为其承载项的 ItemsControl。
        public static System.Windows.Controls.ItemsControl GetItemsOwner(System.Windows.DependencyObject element);

        //确定指定项是否是(或者是否可以作为)其自己的容器
        public bool IsItemItsOwnContainer(object item);

        //确定指定项是否是(或者是否可以作为)其自己的容器。
        protected virtual bool IsItemItsOwnContainerOverride(object item);

        //返回拥有指定容器元素的 ItemsControl。
        public static System.Windows.Controls.ItemsControl ItemsControlFromItemContainer(System.Windows.DependencyObject container);

        //当 AlternationCount 属性更改时调用。
        protected virtual void OnAlternationCountChanged(int oldAlternationCount, int newAlternationCount);

        //当 DisplayMemberPath 属性更改时调用。
        protected virtual void OnDisplayMemberPathChanged(string oldDisplayMemberPath, string newDisplayMemberPath);

        //当 GroupStyleSelector 属性更改时调用。
        protected virtual void OnGroupStyleSelectorChanged(System.Windows.Controls.GroupStyleSelector oldGroupStyleSelector, System.Windows.Controls.GroupStyleSelector newGroupStyleSelector);

        //当 ItemBindingGroup 属性更改时调用。
        protected virtual void OnItemBindingGroupChanged(System.Windows.Data.BindingGroup oldItemBindingGroup, System.Windows.Data.BindingGroup newItemBindingGroup);

        //当 ItemContainerStyle 属性更改时调用。
        protected virtual void OnItemContainerStyleChanged(System.Windows.Style oldItemContainerStyle, System.Windows.Style newItemContainerStyle);

        //当 ItemContainerStyleSelector 属性更改时调用。
        protected virtual void OnItemContainerStyleSelectorChanged(System.Windows.Controls.StyleSelector oldItemContainerStyleSelector, System.Windows.Controls.StyleSelector newItemContainerStyleSelector);

        //当 Items 属性更改时调用。
        protected virtual void OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e);

        //当 ItemsPanel 属性更改时调用。
        protected virtual void OnItemsPanelChanged(System.Windows.Controls.ItemsPanelTemplate oldItemsPanel, System.Windows.Controls.ItemsPanelTemplate newItemsPanel);

        //当 ItemsSource 属性更改时调用。
        protected virtual void OnItemsSourceChanged(System.Collections.IEnumerable oldValue, System.Collections.IEnumerable newValue);

        //当 ItemStringFormat 属性更改时调用。
        protected virtual void OnItemStringFormatChanged(string oldItemStringFormat, string newItemStringFormat);

        //当 ItemTemplate 属性更改时调用。
        protected virtual void OnItemTemplateChanged(System.Windows.DataTemplate oldItemTemplate, System.Windows.DataTemplate newItemTemplate);

        //当 ItemTemplateSelector 属性更改时调用。
        protected virtual void OnItemTemplateSelectorChanged(System.Windows.Controls.DataTemplateSelector oldItemTemplateSelector, System.Windows.Controls.DataTemplateSelector newItemTemplateSelector);

        //在接收到 KeyDown 事件时调用。
        protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e);

        //在接收到 TextInput 事件时调用。
        protected override void OnTextInput(System.Windows.Input.TextCompositionEventArgs e);

        //准备好指定的元素以显示指定的项。
        protected virtual void PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item);

        //返回一个值,该值表示是否将属性 ItemContainerStyle 或 ItemContainerStyleSelector 的样式应用到指定的项的容器元素。
        protected virtual bool ShouldApplyItemContainerStyle(System.Windows.DependencyObject container, object item);

        //返回一个值,该值指示序列化进程是否应序列化 GroupStyle 属性的有效值。
        public bool ShouldSerializeGroupStyle();

        //返回一个值,该值指示序列化进程是否应序列化 Items 属性的有效值。
        public bool ShouldSerializeItems();

        //提供 ItemsControl 对象的字符串表示形式。
        public override string ToString();

        //清除所有的属性关联。
        void IContainItemStorage.Clear();

        //删除指定的项目与该元素之间的关联。
        void IContainItemStorage.ClearItemValue(object item, System.Windows.DependencyProperty dp);

        //从所有属性列表中删除指定属性。
        void IContainItemStorage.ClearValue(System.Windows.DependencyProperty dp);

        //返回与指定项相关的指定属性的值。
        object IContainItemStorage.ReadItemValue(object item, System.Windows.DependencyProperty dp);

        //存储指定的属性和值,并将它们与指定的项相关联。
        void IContainItemStorage.StoreItemValue(object item, System.Windows.DependencyProperty dp, object value);

        //此成员支持 Windows Presentation Foundation (WPF) 基础结构,不应在代码中直接使用。
        void IAddChild.AddChild(object value);

        //此成员支持 Windows Presentation Foundation (WPF) 基础结构,不应在代码中直接使用。
        void IAddChild.AddText(string text);

        //ItemsControl.AlternationIndex
        //当使用交替项目容器时,获取项目容器的分配值。
        //void IAddChild.AddText (string text);
    }

2.5.5 ListBox

包含可选项列表。

ListBox 为 ItemsControl ,这意味着它可以包含任何类型的对象的集合 (例如字符串、图像或面板) 。 有关更多信息,请参见 ItemsControl 类。

ListBox中的多个项 是可见的,不同于ComboBox ,只有选定项可见,除非 IsDropDownOpen 属性为 true 。 SelectionMode属性确定ListBox 中的多个项是否一次可选择。

SelectionMode属性确定用户一次可以选择多少项。 可以将属性设置为 Single (默认) 、 Multiple 或 Extended 。 下表描述了这些枚举值的行为。

注解
说明
Single 用户一次只能选择一项。
Multiple 用户可以选择多个项而无需按下修改键。
Extended 通过按住 CTRL 键并单击这些项,用户可以选择多个连续项,同时按住 SHIFT 键或不连续项。

ListBox 控件通常与数据绑定一起使用。 有关详细信息,请参阅 数据绑定概述。

显示大量项可能会导致性能问题。 有关详细信息,请参阅 优化性能:控件 。

自定义 ListBox 控件

若要对多个ListBox控件应用相同的属性设置  ,请使用 Style 属性。 您可以修改 ControlTemplate默认值 ,为控件指定独特的外观。 有关创建 ControlTemplate的详细信息 ,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于 ListBox 的部分和状态,请参阅 ListBox 样式和模板。

此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题。

只有视觉对象属性已存在于控件的默认模板中并且已使用 TemplateBinding 设置时,设置该属性才有效。 在通过创建 ControlTemplate 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。

   public class ListBox : Selector
    {
        public static readonly System.Windows.DependencyProperty SelectedItemsProperty;
        public static readonly System.Windows.DependencyProperty SelectionModeProperty;

        //获取或设置当 SelectionMode 为 Extended 时,最初选择的项目。
        protected object AnchorItem { get; set; }

        //获取一个值,该值指示 ListBox 是否支持滚动。
        protected internal override bool HandlesScrolling { get; }

        //获取当前选定的项。
        public System.Collections.IList SelectedItems { get; }

        //获取或设置 ListBox 的选择行为。
        public System.Windows.Controls.SelectionMode SelectionMode { get; set; }

        //创建或标识用于显示指定项的元素。
        protected override System.Windows.DependencyObject GetContainerForItemOverride();

        //确定指定项是否是(或者是否可以作为)自己的 ItemContainer。
        protected override bool IsItemItsOwnContainerOverride(object item);

        //提供 ListBoxAutomationPeer 此控件的适当实现,作为 WPF 自动化基础结构的一部分。
        protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer();

        //当 IsMouseCaptured 属性更改时调用。
        protected override void OnIsMouseCapturedChanged(System.Windows.DependencyPropertyChangedEventArgs e);

        //响应 KeyDown 事件。
        protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e);

        //在 ListBox 报告鼠标移动时调用。
        protected override void OnMouseMove(System.Windows.Input.MouseEventArgs e);

        //通过引发 SelectionChanged 事件来对列表框选择更改作出响应。
        protected override void OnSelectionChanged(System.Windows.Controls.SelectionChangedEventArgs e);

        //准备好指定的元素以显示指定的项。
        protected override void PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item);

        //使对象滚动到视图中。
        public void ScrollIntoView(object item);

        //选择 ListBox 中的所有项。
        public void SelectAll();

        //设置选定项的集合。
        protected bool SetSelectedItems(System.Collections.IEnumerable selectedItems);

        //清除 ListBox 中的所有选择。
        public void UnselectAll();
    }

2.5.6 ListView

表示用于显示数据项列表的控件。

ListView 为 ItemsControl ,这意味着它可以包含任何类型的对象的集合 (例如字符串、图像或面板) 。 有关更多信息,请参见 ItemsControl 类。

 ListView 中数据项的显示是由属性指定的视图模式来定义的 View 。 Windows Presentation Foundation (WPF) 提供了一个 GridView 视图模式,该模式将 ListView 数据项内容分区为多个列。 及其相关类样式中的属性和方法, GridView 并指定列的内容。

下图显示了 ListView 具有视图的 GridView 。

具有 GridView 输出的 ListView

您还可以通过创建从派生的类来定义自定义视图 ViewBase 。 有关详细信息,请参阅 如何:为 ListView 创建自定义视图模式。

如果您为ListView控件定义了自定义ItemContainerStyle,并且还定义了ItemTemplate,则必须在ItemContainerStyle中包括ContentPresenter。必须使用ContentPresenter才能使ItemTemplate正常工作。

为了避免GridView视图模式下的对齐问题,请不要在ListView的ItemContainerStyle中添加影响项目宽度的内容或设置属性。为防止对齐问题,请使用为GridView视图模式定义的属性和模板。这包括为在GridView视图模式下使用的类定义的属性和模板,例如GridViewColumn和GridViewColumnHeader。

两个ListView控件不能共享同一视图。若要指定可以多次使用的视图,请使用模板或样式。有关定义为可重用资源的GridView和其他自定义视图的示例,请参见具有多个视图示例的ListView。

不要对使用GridView显示的ListView内容使用Horizo​​ntalContentAlignment和VerticalContentAlignment属性。要在GridView的列中指定内容的对齐方式,请定义一个CellTemplate。

显示大量项目可能会导致性能问题。有关更多信息,请参见优化性能:控件。

    public class ListView : ListBox
    {
        //获取或设置一个对象,用于定义如何在 ListView 控件中设置数据样式和组织数据。
        public static readonly System.Windows.DependencyProperty ViewProperty;

        //获取或设置一个对象,用于定义如何在 ListView 控件中设置数据样式和组织数据。
        public System.Windows.Controls.ViewBase View { get; set; }

        //移除显示为 ListViewItem 的对象的所有模板、样式和绑定。
        protected override void ClearContainerForItemOverride(System.Windows.DependencyObject element, object item);

        //创建并返回一个新的 ListViewItem 容器。
        protected override System.Windows.DependencyObject GetContainerForItemOverride();

        //确定对象是否为 ListViewItem。
        protected override bool IsItemItsOwnContainerOverride(object item);

        //定义 AutomationPeer 控件的 ListView。
        protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer();

        //响应 OnItemsChanged(NotifyCollectionChangedEventArgs)。
        protected override void OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e);

        //为 ListViewItem 设置样式、模板和绑定。
        protected override void PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item);
    }

2.5.7 MenuBase

表示一个控件,该控件定义供用户选择的选项。

MenuBase是控件的基类,这些控件定义用户选择的选项。 Menu和 ContextMenu 从继承, MenuBase 并允许用户选择一个项来调用某个操作。

MenuBase 为 ItemsControl ,这意味着它可以包含任何类型的对象的集合 (例如字符串、图像或面板) 。 有关更多信息,请参见 ItemsControl 类。

   public abstract class MenuBase : ItemsControl
    {
        public static readonly System.Windows.DependencyProperty ItemContainerTemplateSelectorProperty;
        public static readonly System.Windows.DependencyProperty UsesItemContainerTemplateProperty;

        //获取或设置用于选择用来显示每个项的模板的自定义逻辑。
        public System.Windows.Controls.ItemContainerTemplateSelector ItemContainerTemplateSelector { get; set; }

        //获取或设置指示菜单是根据基础集合中项的类型还是一些其他的启发方法来选择不同的项容器的值。
        public bool UsesItemContainerTemplate { get; set; }

        //创建或标识用于显示指定项的元素。
        protected override System.Windows.DependencyObject GetContainerForItemOverride();

        //在按下或释放鼠标按钮时调用。
        protected virtual void HandleMouseButton(System.Windows.Input.MouseButtonEventArgs e);

        //确定指定项是否是其自身的项容器,或是否可以作为其自身的项容器。
        protected override bool IsItemItsOwnContainerOverride(object item);

        //响应对 IsKeyboardFocusWithin 属性所做的更改。
        protected override void OnIsKeyboardFocusWithinChanged(System.Windows.DependencyPropertyChangedEventArgs e);

        //为用户按任意键时引发的 KeyDown 路由事件提供类处理。
        protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e);

        //为鼠标离开控件时发生的 MouseLeave 路由事件提供类处理。
        protected override void OnMouseLeave(System.Windows.Input.MouseEventArgs e);
    }

2.5.8 Menu

表示一个 Windows 菜单控件,该控件可用于按层次组织与命令和事件处理程序关联的元素。

Menu控件提供了一个项列表,这些项指定了应用程序的命令或选项。 通常,单击菜单上的项将打开子菜单或使应用程序执行命令。

Menu 是 ItemsControl ,这意味着它可以包含任何类型的对象的集合 (例如字符串、图像或面板) 。 有关更多信息,请参见 ItemsControl 类。 MenuItem是 Menu 中最常见的项类型。 MenuItem可以包含子项。 当用户选择父项时,子菜单项将出现在 MenuItem 子菜单中。

自定义菜单控件

若要对多个 Menu 控件应用相同的属性设置,请使用 Style 属性。 您可以修改 ControlTemplate默认值 ,为控件指定独特的外观。 有关创建 ControlTemplate 的详细信息,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于Menu 的部分和状态,请 参阅 菜单样式和模板。

此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题。

只有视觉对象属性已存在于控件的默认模板中并且已使用 TemplateBinding 设置时,设置该属性才有效。 在通过创建 ControlTemplate 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。

    public class Menu : MenuBase
    {
        public static readonly System.Windows.DependencyProperty IsMainMenuProperty;

        //获取或设置一个值,该值指示此 Menu 是否接收主菜单激活通知。
        public bool IsMainMenu { get; set; }

        //在按下或释放任意鼠标按钮时调用。
        protected override void HandleMouseButton(System.Windows.Input.MouseButtonEventArgs e);

        //提供 MenuAutomationPeer 此控件的适当实现,作为 WPF 自动化基础结构的一部分。
        protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer();

        //当 IsInitialized 属性设置为 true 时调用。
        protected override void OnInitialized(EventArgs e);

        //响应 KeyDown 事件。
        protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e);

        //处理 TextInput 路由事件,该事件在菜单接收来自任何设备的文本输入时发生。
        protected override void OnTextInput(System.Windows.Input.TextCompositionEventArgs e);

        //准备好指定的元素以显示指定的项。
        protected override void PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item);
    }

2.5.9 Selector

表示允许用户从其子元素中选择项的控件。

Selector 为 ItemsControl ,这意味着它可以包含任何类型的对象的集合 (例如字符串、图像或面板) 。 有关更多信息,请参见 ItemsControl 类。

    public abstract class Selector : ItemsControl
    {
        public static readonly System.Windows.DependencyProperty IsSelectedProperty;
        public static readonly System.Windows.DependencyProperty IsSelectionActiveProperty;
        public static readonly System.Windows.DependencyProperty IsSynchronizedWithCurrentItemProperty;
        public static readonly System.Windows.RoutedEvent SelectedEvent;
        public static readonly System.Windows.DependencyProperty SelectedIndexProperty;
        public static readonly System.Windows.DependencyProperty SelectedItemProperty;
        public static readonly System.Windows.DependencyProperty SelectedValuePathProperty;
        public static readonly System.Windows.DependencyProperty SelectedValueProperty;
        public static readonly System.Windows.RoutedEvent SelectionChangedEvent;
        public static readonly System.Windows.RoutedEvent SelectionChangedEvent;

        //获取或设置指示 Selector 是否应当使 SelectedItem 与 Items 属性中的当前项保持同步的值。
        public bool? IsSynchronizedWithCurrentItem { get; set; }

        //获取或设置当前选择中第一项的索引,如果选择为空,则返回负一(-1)。
        public int SelectedIndex { get; set; }

        //获取或设置当前选择中的第一项,或者,如果选择为空,则返回 null。
        public object SelectedItem { get; set; }

        //获取或设置通过使用 SelectedItem 而获取的 SelectedValuePath 的值。
        public object SelectedValue { get; set; }

        //获取或设置用于从 SelectedValue 获取 SelectedItem 的路径。
        public string SelectedValuePath { get; set; }

        //为 Selected 附加事件添加处理程序。
        public static void AddSelectedHandler(System.Windows.DependencyObject element, System.Windows.RoutedEventHandler handler);

        //为 Unselected 附加事件添加处理程序
        public static void AddUnselectedHandler(System.Windows.DependencyObject element, System.Windows.RoutedEventHandler handler);

        //将项容器返回到其在 PrepareContainerForItemOverride(DependencyObject, Object) 之前所处的状态。
        protected override void ClearContainerForItemOverride(System.Windows.DependencyObject element, object item);

        //获取附加属性 IsSelected 的值,该值表示是否选择了某个项。
        public static bool GetIsSelected(System.Windows.DependencyObject element);

        //获取一个值,该值指示键盘焦点是否位于 Selector 中。
        public static bool GetIsSelectionActive(System.Windows.DependencyObject element);

        //引发 Initialized 事件。 每当在内部将 IsInitialized 设置为 true 时调用此方法。
        protected override void OnInitialized(EventArgs e);

        //当 IsKeyboardFocusWithin 属性更改时调用。
        protected override void OnIsKeyboardFocusWithinChanged(System.Windows.DependencyPropertyChangedEventArgs e);

        //当 Selector 中的项更改时更新当前选择。
        protected override void OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e);

        //当选择器中的项来源更改时调用。
        protected override void OnItemsSourceChanged(System.Collections.IEnumerable oldValue, System.Collections.IEnumerable newValue);

        //当选择更改时调用。
        protected virtual void OnSelectionChanged(System.Windows.Controls.SelectionChangedEventArgs e);

        //准备好指定的元素以显示指定的项。
        protected override void PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item);

        //移除 Selected 附加事件的处理程序。
        public static void RemoveSelectedHandler(System.Windows.DependencyObject element, System.Windows.RoutedEventHandler handler);

        //移除 Unselected 附加事件的处理程序。
        public static void RemoveUnselectedHandler(System.Windows.DependencyObject element, System.Windows.RoutedEventHandler handler);

        //设置指示是否选择 Selector 中的项的属性值。
        public static void SetIsSelected(System.Windows.DependencyObject element, bool isSelected);

        //当 Selector 的选择更改时发生。
        public event System.Windows.Controls.SelectionChangedEventHandler SelectionChanged;

        //Selector.IsSelected
        //获取或设置一个值,该值指示是否选择了某个项。
        //see GetIsSelected, and SetIsSelected

        //Selector.IsSelectionActive
        //获取一个值,该值指示键盘焦点是否处于 Selector 返回的值中。
        //see GetIsSelectionActive

        //Selector.Selected 附加事件
        //当选择项时发生。
        //see AddSelectedHandler, and RemoveSelectedHandler

        //Selector.Unselected 附加事件
        //当取消选择项时发生。
        //see AddUnselectedHandler, and RemoveUnselectedHandler

    }

2.5.10 TabControl

表示包含多个项的控件,这些项共享屏幕上的同一空间。

TabControl有助于最大程度地减少屏幕空间使用量,同时允许应用程序公开大量数据。 TabControl包含共享同一屏幕空间的多个 TabItem 对象。 一 次只能看到  TabControl 中的一个TabItem。 当用户选择 TabItem 的选项卡时,将显示TabItem 的内容,并且隐藏其他对象的内容 TabItem 。

TabControl 为 ItemsControl ,这意味着它可以包含任何类型的对象的集合 (例如字符串、图像或面板) 。 有关更多信息,请参见 ItemsControl 类。

自定义 TabControl 控件

若要对多个 TabControl 控件应用相同的属性设置,请使用 Style 属性。 您可以修改 ControlTemplate 默认值,为控件指定独特的外观。 有关创建 ControlTemplate 的详细信息,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于 TabControl 的部分和状态,请参阅 TabControl 样式和模板。

此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题。

只有视觉对象属性已存在于控件的默认模板中并且已使用 TemplateBinding 设置时,设置该属性才有效。 在通过创建 ControlTemplate 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。

    public class TabControl : Selector
    {
        public static readonly System.Windows.DependencyProperty ContentStringFormatProperty;
        public static readonly System.Windows.DependencyProperty ContentTemplateProperty;
        public static readonly System.Windows.DependencyProperty ContentTemplateSelectorProperty;
        public static readonly System.Windows.DependencyProperty SelectedContentProperty;
        public static readonly System.Windows.DependencyProperty SelectedContentStringFormatProperty;
        public static readonly System.Windows.DependencyProperty SelectedContentTemplateProperty;
        public static readonly System.Windows.DependencyProperty SelectedContentTemplateSelectorProperty;
        public static readonly System.Windows.DependencyProperty TabStripPlacementProperty;

        //获取一个撰写字符串,该字符串指定如果 TabItem 对象的内容显示为字符串,应如何设置这些内容的格式。
        public string ContentStringFormat { get; set; }

        //获取或设置 DataTemplate 以应用于所有未定义 TabItem 或 ContentTemplate 属性的 ContentTemplateSelector。
        public System.Windows.DataTemplate ContentTemplate { get; set; }

        //获取或设置为选择用于显示控件内容的模板提供自定义逻辑的 DataTemplateSelector。
        public System.Windows.Controls.DataTemplateSelector ContentTemplateSelector { get; set; }

        //获取当前选择的 TabItem 的内容。
        public object SelectedContent { get; }

        //获取一个撰写字符串,该字符串指定如果当前选定的 TabItem 的内容显示为字符串,应如何设置该内容的格式。
        public string SelectedContentStringFormat { get; }

        //获取当前所选项的 DataTemplate。
        public System.Windows.DataTemplate SelectedContentTemplate { get; }

        //获取当前所选项的 DataTemplateSelector。
        public System.Windows.Controls.DataTemplateSelector SelectedContentTemplateSelector { get; }

        //获取或设置选项卡标题如何相对于选项卡内容进行对齐。
        public System.Windows.Controls.Dock TabStripPlacement { get; set; }

        //创建或标识用于显示指定项的元素。
        protected override System.Windows.DependencyObject GetContainerForItemOverride();

        //确定指定项是否是(或可作为)其自己的 ItemContainer。
        protected override bool IsItemItsOwnContainerOverride(object item);

        //调用 ApplyTemplate() 时进行调用。
        public override void OnApplyTemplate();

        //提供 TabControlAutomationPeer 此控件的适当实现,作为 WPF 自动化基础结构的一部分。
        protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer();

        //当 IsInitialized 设置为 true 时调用。
        protected override void OnInitialized(EventArgs e);

        //调用以在项更改时更新当前选择。
        protected override void OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e);

        //为用户按任意键时引发的 KeyDown 路由事件提供类处理
        protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e);

        //引发 SelectionChanged 路由事件。
        protected override void OnSelectionChanged(System.Windows.Controls.SelectionChangedEventArgs e);
    }

2.5.11 TreeView

表示一个控件,该控件在树结构(其中的项可以展开和折叠)中显示分层数据。

TreeView 为 ItemsControl ,这意味着它可以包含任何类型的对象的集合 (例如字符串、图像或面板) 。 有关更多信息,请参见 ItemsControl 类。

下图显示了一个简单的 TreeView 。

WPF基础四:UI的相关类 (5)ItemsControl类_第3张图片

 TreeView 的内容是 TreeViewItem, 可以包含丰富内容(如 Button 和Image 控件)的控件。 TreeViewItem可以包含一个或多个 TreeViewItem 对象作为其子对象。 TreeView定义为对象的层次结构 TreeViewItem 。

TreeView通过绑定到数据源和使用对象,可以填充其 HierarchicalDataTemplate树 。 数据源的示例包括 XmlDataProvider 和 ObservableCollection 对象。

显示大量项可能会导致性能问题。 有关详细信息,请参阅 优化性能:控件 。 若要提高性能 TreeView ,请参阅 如何:提高 TreeView 的性能。

有关控件的详细信息 TreeView ,请参阅 TreeView 概述。

TreeView具有有限的级别数。 有关详细信息,请参阅 Visual。

自定义 TreeView 控件

若要对多个 TreeView 控件应用相同的属性设置,请使用 Style 属性。 您可以修改 ControlTemplate 默认值,为控件指定独特的外观。 有关创建 ControlTemplate 的详细信息,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于 TreeView 的部分和状态,请参阅 TreeView 样式和模板。

此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题。

只有视觉对象属性已存在于控件的默认模板中并且已使用 TemplateBinding 设置时,设置该属性才有效。 在通过创建 ControlTemplate 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。

    public class TreeView : ItemsControl
    {
        public static readonly System.Windows.RoutedEvent SelectedItemChangedEvent;
        public static readonly System.Windows.DependencyProperty SelectedItemProperty;
        public static readonly System.Windows.DependencyProperty SelectedValuePathProperty;
        public static readonly System.Windows.DependencyProperty SelectedValueProperty;

        //获取 TreeView 能否滚动。
        protected internal override bool HandlesScrolling { get; }

        //获取 TreeView 中的选定项。
        public object SelectedItem { get; }

        //获取由 SelectedValuePath 的 SelectedItem 指定的属性的值。
        public object SelectedValue { get; }

        //获取或设置用于获取 SelectedValue 中 SelectedItem 的 TreeView 的路径。
        public string SelectedValuePath { get; set; }

        //展开指定的 TreeViewItem 控件及其所有子 TreeViewItem 元素。
        protected virtual bool ExpandSubtree(System.Windows.Controls.TreeViewItem container);

        //创建用于显示内容的 TreeViewItem。
        protected override System.Windows.DependencyObject GetContainerForItemOverride();

        //确定指定项是否是其自己的容器,或可以作为其自己的容器。
        protected override bool IsItemItsOwnContainerOverride(object item);

        //定义 AutomationPeer 控件的 TreeView。
        protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer();

        //引发 GotFocus 路由事件。
        protected override void OnGotFocus(System.Windows.RoutedEventArgs e);

        //为在 IsKeyboardFocusWithinChanged 的键盘焦点更改时发生的 TreeView 事件提供类处理。
        protected override void OnIsKeyboardFocusWithinChanged(System.Windows.DependencyPropertyChangedEventArgs e);

        //为在 ItemsChanged 集合更改时发生的 Items 事件提供类处理。
        protected override void OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e);

        //为 KeyDown 的 TreeView 事件提供类处理。
        protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e);

        //在 SelectedItemChanged 属性值更改时引发 SelectedItem 事件。
        protected virtual void OnSelectedItemChanged(System.Windows.RoutedPropertyChangedEventArgs e);

        //当 SelectedItem 更改时发生。
        public event System.Windows.RoutedPropertyChangedEventHandler SelectedItemChanged;
    } 
  

2.5.12  MultiSelector

为允许选择多项的控件提供抽象类。

从类派生类时 MultiSelector ,请将 CanSelectMultipleItems 属性设置为, true 以允许在控件中进行多选。

    public abstract class MultiSelector : Selector
    {
        //获取或设置一个值,该值指示是否可以一次选择 MultiSelector 中的多个项
        protected bool CanSelectMultipleItems { get; set; }

        //获取一个值,该值指示 MultiSelector 当前是否正在对 SelectedItems 集合执行批量更新。
        protected bool IsUpdatingSelectedItems { get; }

        //获取在 MultiSelector 中选定的项。
        public System.Collections.IList SelectedItems { get; }

        //启动新的选择事务。
        protected void BeginUpdateSelectedItems();

        //将所选项提交到 MultiSelector。
        protected void EndUpdateSelectedItems();

        //选择 MultiSelector 中的所有项。
        public void SelectAll();

        //取消选择 MultiSelector 中的所有项。
        public void UnselectAll();
    }

参考MSDN

你可能感兴趣的:(#,UI控件相关类)