WPF基础四:UI的相关类(6)HeaderedItemsControl类

目录

2.6 带标题的条目控件

2.6.1 MenuItem

2.6.2 ToolBar

2.6.3 TreeViewItem


2.6 带标题的条目控件


2.6.1 MenuItem

表示 Menu 内某个可选择的项。

MenuItem 是一个 HeaderedItemsControl ,它表示对象的标头和集合可以是任何类型 (例如字符串、图像或面板) 。 有关更多信息,请参见 HeaderedItemsControl 类。

MenuItem可以具有子菜单。 MenuItem  的子菜单由MenuItem 的中的对象 ItemCollection 组成。 通常, MenuItem 包含其他 MenuItem 对象来创建嵌套的子菜单。

MenuItem可以具有以下多个函数之一:

  • 可以选择它来调用命令。
  • 它可以是其他菜单项的分隔符。
  • 它可以是子菜单的标头。
  • 可以选中或取消选中此项。

默认情况下, MenuItem 的 HorizontalAlignment设置为 HorizontalAlignment.Stretch 。  StackPanel 的默认水平位置是 HorizontalAlignment.Center 。 如果通过将 Width 的属性设置为MenuItem ,则将StackPanel 应用堆栈面板的默认值,并将项目居中。

MenuItem处理 MouseDown 事件,因此,如果将事件处理程序附加到 MouseDown ,则永远不会调用您的处理程序。 若要添加自己的处理程序,请 PreviewMouseDown MouseDown 通过 AddHandler(RoutedEvent, Delegate, Boolean) 在设置为的情况下调用来订阅事件或订阅 handledEventsToo true 。

    public class MenuItem : HeaderedItemsControl, ICommandSource
    {
        public static readonly System.Windows.RoutedEvent CheckedEvent;
        public static readonly System.Windows.RoutedEvent ClickEvent;
        public static readonly System.Windows.DependencyProperty CommandParameterProperty;
        public static readonly System.Windows.DependencyProperty CommandProperty;
        public static readonly System.Windows.DependencyProperty CommandTargetProperty;
        public static readonly System.Windows.DependencyProperty IconProperty;
        public static readonly System.Windows.DependencyProperty InputGestureTextProperty;
        public static readonly System.Windows.DependencyProperty IsCheckableProperty;
        public static readonly System.Windows.DependencyProperty IsCheckedProperty;
        public static readonly System.Windows.DependencyProperty IsHighlightedProperty;
        public static readonly System.Windows.DependencyProperty IsPressedProperty;
        public static readonly System.Windows.DependencyProperty IsSubmenuOpenProperty;
        public static readonly System.Windows.DependencyProperty IsSuspendingPopupAnimationProperty;
        public static readonly System.Windows.DependencyProperty ItemContainerTemplateSelectorProperty;
        public static readonly System.Windows.DependencyProperty RoleProperty;
        public static readonly System.Windows.DependencyProperty StaysOpenOnClickProperty;
        public static readonly System.Windows.RoutedEvent SubmenuClosedEvent;
        public static readonly System.Windows.RoutedEvent SubmenuOpenedEvent;
        public static readonly System.Windows.RoutedEvent UncheckedEvent;
        public static readonly System.Windows.DependencyProperty UsesItemContainerTemplateProperty;

        //获取或设置与菜单项关联的命令。
        public System.Windows.Input.ICommand Command { get; set; }

        //获取或设置要传递给 Command 的 MenuItem 属性的参数。
        public object CommandParameter { get; set; }

        //获取或设置在其上引发指定命令的目标元素。
        public System.Windows.IInputElement CommandTarget { get; set; }

        //获取控件是否支持滚动。
        protected internal override bool HandlesScrolling { get; }

        //获取或设置显示在 MenuItem 中的图标。
        public object Icon { get; set; }

        //设置文本,以描述将调用与指定项关联的命令的输入笔势。
        public string InputGestureText { get; set; }

        //获取一个指示是否可选中 MenuItem 的值。
        public bool IsCheckable { get; set; }

        //获取或设置一个指示是否选中 MenuItem 的值。
        public bool IsChecked { get; set; }

        //获取一个值,该值指示当前菜单项的 IsEnabled 属性是否为 true。
        protected override bool IsEnabledCore { get; }

        //获取一个指示是否突出显示 MenuItem 的值。
        public bool IsHighlighted { get; protected set; }

        //获取一个指示是否按下 MenuItem 的值。
        public bool IsPressed { get; protected set; }

        //获取或设置一个值,该值指示是否打开 MenuItem 的子菜单。
        public bool IsSubmenuOpen { get; set; }

        //获取菜单是否对其 Popup 控件挂起动画。
        public bool IsSuspendingPopupAnimation { get; }

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

        //获取一个值,该值指示 MenuItem 的角色。
        public System.Windows.Controls.MenuItemRole Role { get; }

        //获取当 MenuItem 为 MenuItem 时应用于 Separator 的样式的资源键。
        public static System.Windows.ResourceKey SeparatorStyleKey { get; }

        //获取或设置一个值,该值指示在单击此 MenuItem 时,该项所在的子菜单不应关闭。
        public bool StaysOpenOnClick { get; set; }

        //获取当 MenuItem 为子菜单标头时应用于 MenuItem 的样式的资源键。
        public static System.Windows.ResourceKey SubmenuHeaderTemplateKey { get; }

        //获取当 MenuItem 为子菜单时应用于 MenuItem 的样式的资源键。
        public static System.Windows.ResourceKey SubmenuItemTemplateKey { get; }

        //获取当 MenuItem 为顶级菜单标头时应用于 MenuItem 的样式的资源键。
        public static System.Windows.ResourceKey TopLevelHeaderTemplateKey { get; }

        //获取当 MenuItem 为可调用命令的顶级 MenuItem 时应用于它的样式的资源键。
        public static System.Windows.ResourceKey TopLevelItemTemplateKey { get; }

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

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

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

        //在调用此控件的 AccessKey 时响应。
        protected override void OnAccessKey(System.Windows.Input.AccessKeyEventArgs e);

        //在生成模板树时调用。
        public override void OnApplyTemplate();

        //在 IsChecked 属性变为 true 时调用。 此方法引发 Checked 路由事件。
        protected virtual void OnChecked(System.Windows.RoutedEventArgs e);

        //在单击 MenuItem 并引发 Click 事件时调用。
        protected virtual void OnClick();

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

        //宣布键盘焦点位于此元素上。
        protected override void OnGotKeyboardFocus(System.Windows.Input.KeyboardFocusChangedEventArgs e);

        //在 IsInitialized 属性设置为 true 并引发 Initialized 事件时调用。
        protected override void OnInitialized(EventArgs e);

        //当焦点不再在 MenuItem 之上或之内时调用。
        protected override void OnIsKeyboardFocusWithinChanged(System.Windows.DependencyPropertyChangedEventArgs e);

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

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

        //每当鼠标进入 MenuItem 时调用。
        protected override void OnMouseEnter(System.Windows.Input.MouseEventArgs e);

        //每当鼠标离开 MenuItem 时调用。
        protected override void OnMouseLeave(System.Windows.Input.MouseEventArgs e);

        //在按下鼠标左键时调用。
        protected override void OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e);

        //在释放鼠标左键时调用。
        protected override void OnMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs e);

        //在鼠标移到菜单项上时调用。
        protected override void OnMouseMove(System.Windows.Input.MouseEventArgs e);

        //在按下鼠标右键时调用。
        protected override void OnMouseRightButtonDown(System.Windows.Input.MouseButtonEventArgs e);

        //在释放鼠标右键时调用。
        protected override void OnMouseRightButtonUp(System.Windows.Input.MouseButtonEventArgs e);

        //在关闭 MenuItem 的子菜单时调用。
        protected virtual void OnSubmenuClosed(System.Windows.RoutedEventArgs e);

        //在打开 MenuItem 的子菜单时调用。
        protected virtual void OnSubmenuOpened(System.Windows.RoutedEventArgs e);

        //在 IsChecked 属性变为 false 时调用。 此方法引发 Unchecked 路由事件。
        protected virtual void OnUnchecked(System.Windows.RoutedEventArgs e);

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

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

        //用于确定是否对项容器应用样式。
        protected override bool ShouldApplyItemContainerStyle(System.Windows.DependencyObject container, object item);

        //在选中菜单项时发生。
        public event System.Windows.RoutedEventHandler Checked;

        //在单击 MenuItem 时发生。
        public event System.Windows.RoutedEventHandler Click;

        //在 IsSubmenuOpen 属性的状态更改为 false 时发生。
        public event System.Windows.RoutedEventHandler SubmenuClosed;

        //在 IsSubmenuOpen 属性的状态更改为 true 时发生。
        public event System.Windows.RoutedEventHandler SubmenuOpened;

        //在未选中 MenuItem 时发生。
        public event System.Windows.RoutedEventHandler Unchecked;
    }

2.6.2 ToolBar

为一组命令或控件提供容器。

ToolBar 控件提供溢出的机制,该机制将不适合的项放置在 ToolBar 溢出区中。 用户只能移动或调整父ToolBarTray 元素中的 toolbar 元素 。

ToolBar 是一个 HeaderedItemsControl ,它表示对象的标头和集合可以是任何类型 (例如字符串、图像或面板) 。 有关更多信息,请参见 HeaderedItemsControl 类。

自定义工具栏控件

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

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

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

    public class ToolBar : HeaderedItemsControl
    {
        public static readonly System.Windows.DependencyProperty BandIndexProperty;
        public static readonly System.Windows.DependencyProperty BandProperty;
        public static readonly System.Windows.DependencyProperty HasOverflowItemsProperty;
        public static readonly System.Windows.DependencyProperty IsOverflowItemProperty;
        public static readonly System.Windows.DependencyProperty IsOverflowOpenProperty;
        public static readonly System.Windows.DependencyProperty OrientationProperty;
        public static readonly System.Windows.DependencyProperty OverflowModeProperty;

        //获取或设置一个值,该值指示工具栏应位于 ToolBarTray 中的什么位置。
        public int Band { get; set; }

        //获取或设置指示工具栏在带区上的位置的带区索引号。
        public int BandIndex { get; set; }

        //将 Style 应用于工具栏上的按钮。
        public static System.Windows.ResourceKey ButtonStyleKey { get; }

        //将 Style 应用于 ToolBar 上的复选框。
        public static System.Windows.ResourceKey CheckBoxStyleKey { get; }

        //将 Style 应用于 ToolBar 上的组合框。
        public static System.Windows.ResourceKey ComboBoxStyleKey { get; }

        //获取一个值,该值指示工具栏上是否有不可见的项。
        public bool HasOverflowItems { get; }

        //获取或设置一个值,该值指示 ToolBar 溢出区当前是否可见。
        public bool IsOverflowOpen { get; set; }

        //将 Style 应用于 ToolBar 上的菜单。
        public static System.Windows.ResourceKey MenuStyleKey { get; }

        //获取 ToolBar 的方向。
        public System.Windows.Controls.Orientation Orientation { get; }

        //将 Style 应用于工具栏上的单选按钮。
        public static System.Windows.ResourceKey RadioButtonStyleKey { get; }

        //将 Style 应用于 ToolBar 上的分隔符。
        public static System.Windows.ResourceKey SeparatorStyleKey { get; }

        //将 Style 应用于 ToolBar 上的文本框
        public static System.Windows.ResourceKey TextBoxStyleKey { get; }

        //获取应用于 ToolBar 上的 ToggleButton 控件的 Style。
        public static System.Windows.ResourceKey ToggleButtonStyleKey { get; }

        //从指定元素中读取 IsOverflowItem 属性的值。
        public static bool GetIsOverflowItem(System.Windows.DependencyObject element);

        //从指定元素中读取 OverflowMode 属性的值。
        public static System.Windows.Controls.OverflowMode GetOverflowMode(System.Windows.DependencyObject element);

        //重新测量 ToolBar。
        protected override System.Windows.Size MeasureOverride(System.Windows.Size constraint);

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

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

        //为在 KeyDown 上的某个项上按任意键时发生的 ToolBar 路由事件提供类处理。
        protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e);

        //为 LostMouseCapture 丢失鼠标捕获时发生的 ToolBar 路由事件提供类处理。
        protected override void OnLostMouseCapture(System.Windows.Input.MouseEventArgs e);

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

        //将 OverflowMode 属性的值写入指定元素。
        public static void SetOverflowMode(System.Windows.DependencyObject element, System.Windows.Controls.OverflowMode mode);

        //ToolBar.IsOverflowItem 附加属性
        //获取指示 ToolBar 项是否为溢出项的值。
        //see GetIsOverflowItem

        //ToolBar.OverflowMode 附加属性
        //获取或设置一个值,该值指示何时应将某个项放入溢出面板,而不是放入主面板。
        //see GetOverflowMode, and SetOverflowMode
    }

2.6.3 TreeViewItem

在 TreeView 控件中实现可选择的项。

TreeViewItem 是一个 HeaderedItemsControl ,它表示对象的标头和集合可以是任何类型 (例如字符串、图像或面板) 。 有关更多信息,请参见 HeaderedItemsControl 类。

TreeViewItem 控件可以嵌入 TreeViewItem 到其他控件中,以在控件中创建节点的层次结构 TreeView 。

下图显示了中的控件层次结构 TreeViewItem TreeView 。

TreeView 图

若要展开或折叠 TreeViewItem ,请使用 IsExpanded 属性。

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

自定义 TreeViewItem 控件

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

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

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

    public class TreeViewItem : HeaderedItemsControl, IHierarchicalVirtualizationAndScrollInfo
    {
        public static readonly System.Windows.RoutedEvent CollapsedEvent;
        public static readonly System.Windows.RoutedEvent ExpandedEvent;
        public static readonly System.Windows.DependencyProperty IsExpandedProperty;
        public static readonly System.Windows.DependencyProperty IsSelectedProperty;
        public static readonly System.Windows.DependencyProperty IsSelectionActiveProperty;
        public static readonly System.Windows.RoutedEvent SelectedEvent;
        public static readonly System.Windows.RoutedEvent UnselectedEvent;

        //获取或设置 TreeViewItem 中的嵌套项是处于展开状态还是折叠状态。
        public bool IsExpanded { get; set; }

        //获取或设置 TreeViewItem 控件是否处于选定状态。
        public bool IsSelected { get; set; }

        //获取一个值,该值指示包含的 TreeView 是否具有键盘焦点。
        public bool IsSelectionActive { get; }

        //排列 TreeViewItem 的内容。
        protected override System.Windows.Size ArrangeOverride(System.Windows.Size arrangeSize);

        //展开 TreeViewItem 控件及其所有子 TreeViewItem 元素。
        public void ExpandSubtree();

        //创建新的 TreeViewItem 以用于显示对象。
        protected override System.Windows.DependencyObject GetContainerForItemOverride();

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

        //当 Collapsed 属性从 true 更改为 false 时,引发 IsExpanded 事件。
        protected virtual void OnCollapsed(System.Windows.RoutedEventArgs e);

        //定义用于 AutomationPeer 的 TreeViewItem。
        protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer();

        //当 Expanded 属性从 false 更改为 true 时,引发 IsExpanded 事件。
        protected virtual void OnExpanded(System.Windows.RoutedEventArgs e);

        //提供用于 GotFocus 事件的类处理。
        protected override void OnGotFocus(System.Windows.RoutedEventArgs e);

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

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

        //提供用于 MouseLeftButtonDown 事件的类处理。
        protected override void OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e);

        //当 Selected 属性从 false 更改为 true 时,引发 IsSelected 路由事件。
        protected virtual void OnSelected(System.Windows.RoutedEventArgs e);

        //当 Unselected 属性从 true 更改为 false 时,引发 IsSelected 路由事件。
        protected virtual void OnUnselected(System.Windows.RoutedEventArgs e);

        //响应 TreeViewItem 的可视父级的更改。
        protected internal override void OnVisualParentChanged(System.Windows.DependencyObject oldParent);

        //当 IsExpanded 属性从 true 更改为 false 时发生。
        public event System.Windows.RoutedEventHandler Collapsed;

        //当 IsExpanded 属性从 false 更改为 true 时发生。
        public event System.Windows.RoutedEventHandler Expanded;

        //当 IsSelected 的 TreeViewItem 属性从 false 更改为 true 时发生。
        public event System.Windows.RoutedEventHandler Selected;

        //当 IsSelected 的 TreeViewItem 属性从 true 更改为 false 时发生。
        public event System.Windows.RoutedEventHandler Unselected;

        //获取或设置表示 TreeViewItem 的视区和缓存大小的对象。
        System.Windows.Controls.HierarchicalVirtualizationConstraints System.Windows.Controls.Primitives.IHierarchicalVirtualizationAndScrollInfo.Constraints { get; set; }

        //获取像素中和逻辑单元中表示 Header 所需大小的对象。
        System.Windows.Controls.HierarchicalVirtualizationHeaderDesiredSizes System.Windows.Controls.Primitives.IHierarchicalVirtualizationAndScrollInfo.HeaderDesiredSizes { get; }

        //获取指示控件的布局传递是否出现在较低优先级中的值。
        bool System.Windows.Controls.Primitives.IHierarchicalVirtualizationAndScrollInfo.InBackgroundLayout { get; set; }

        //获取或设置表示控件项的所需大小(像素和逻辑单位)的对象。
        System.Windows.Controls.HierarchicalVirtualizationItemDesiredSizes System.Windows.Controls.Primitives.IHierarchicalVirtualizationAndScrollInfo.ItemDesiredSizes { get; set; }

        //获取 Panel 的 Items 显示的 TreeViewItem。
        System.Windows.Controls.Panel System.Windows.Controls.Primitives.IHierarchicalVirtualizationAndScrollInfo.ItemsHost { get; }

        //获取或设置一个值,该值指示所属 ItemsControl 是否应虚拟化。
        bool System.Windows.Controls.Primitives.IHierarchicalVirtualizationAndScrollInfo.MustDisableVirtualization { get; set; }

    }

参考微软MSDN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值