目录

 

2.4)带标题内容控件

2.4.1 Expander

2.4.2 GroupBox

2.4.3 HeaderedContentControl 

2.4.4 TabItem


2.4)带标题内容控件

 


2.4.1 Expander

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

Expander 为 HeaderedContentControl ,这意味着其 Content 和 Header 属性可以是任何类型 (例如字符串、图像或面板) 。 有关更多信息,请参见 HeaderedContentControl 类。

下图显示了一个 Expander 控件。

header 携带bear token java_Windows

如果展开的窗口的内容对窗口而言太大,则可以将 Expander 控件中的内容包装在ScrollViewer 以提供可滚动的内容。  Expander控件不自动提供滚动功能 。

为了使Expander正常工作,当ExpandDirection属性设置为DownUp时,请不要在Expander控件上指定Height。同样,当ExpandDirection属性设置为LeftRight时,也不要在Expander控件上指定Width。 当您在 Expander 控件上设置扩展内容的方向时,则由size参数定义的区域将显示为带有边框。 即使窗口处于折叠状态,也会显示此区域。 若要设置扩展窗口的大小,请在Expander控件或包围该内容的ScrollViewer的内容上设置大小尺寸

如果 Expander 控件是 DockPanel 中的最后一个元素,Expander 则将调整大小以填充 DockPanel 的剩余区域。 若要防止出现这种情况,请将 DockPanel 的 LastChildFill 的属性设置为 false ,或确保 Expander 不是DockPanel 中的最后一个元素。

可以通过在Expander控件设置 HorizontalContentAlignment 和VerticalContentAlignment 属性来定义内容的对齐方式。 这些属性将应用于标头和展开窗口的内容。

自定义扩展器控件

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

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

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

public class Expander : HeaderedContentControl
    {
        public static readonly System.Windows.RoutedEvent CollapsedEvent;//标识 Collapsed 路由事件。
        public static readonly System.Windows.DependencyProperty ExpandDirectionProperty;//标识 ExpandDirection 依赖项属性。
        public static readonly System.Windows.RoutedEvent ExpandedEvent;//标识 Expanded 路由事件。
        public static readonly System.Windows.DependencyProperty IsExpandedProperty;//标识 IsExpanded 依赖项属性。

        //获取或设置 Expander 内容窗口的打开方向。
        public System.Windows.Controls.ExpandDirection ExpandDirection { get; set; }

        //获取或设置 Expander 内容窗口是否可见。
        public bool IsExpanded { get; set; }

        //每当应用程序代码或内部进程调用 ApplyTemplate() 时,进行调用。
        public override void OnApplyTemplate();

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

        //创建 AutomationPeer 控件的 Expander 实现。
        protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer();

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

        //在 Expander 控件的内容窗口关闭且只有 Header 可见时发生。
        public event System.Windows.RoutedEventHandler Collapsed;

        //在 Expander 控件的内容窗口打开时发生,以便同时显示其标题和内容。
        public event System.Windows.RoutedEventHandler Expanded;
    }

2.4.2 GroupBox

表示一个控件,该控件用于创建具有用户界面 (UI) 内容边框和标题的容器。

下图是一个的示例 GroupBox ,它包含一个 TabControl 和一个括在 StackPanel 中的 Button 。

header 携带bear token java_System_02

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

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

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

public class GroupBox : HeaderedContentControl
    {
        //当按下 GroupBox 的 AccessKey 时响应。
        protected override void OnAccessKey(System.Windows.Input.AccessKeyEventArgs e);

        //创建 AutomationPeer 控件的 GroupBox 的实现。
        protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer();
    }

2.4.3 HeaderedContentControl 

为包含单项内容并具有标头的所有控件提供基实现。

HeaderedContentControl 从 ContentControl 继承 Content 属性 ,并定义 Header 的属性类型为 Object 。提供 Header 控件的标题。像ContentControlContent属性一样,Header可以是任何类型。

下图显示了两个TabItem对象,它们继承自HeaderedContentControl。第一个TabItem标题和内容中都具有UIElement对象作为内容标题设置为包含EllipseTextBlockStackPanel;在内容设置为StackPanel中包含的TextBlock标签。第二个TabItemHeader设置为字符串,并且Content设置为单个TextBlock

header 携带bear token java_Windows_03

Header属性中具有不同类型的TabControl

一个HeaderedContentControl具有有限的默认样式。应用程序开发人员可以创建HeaderedContentControl,但是其外观将非常简单。如果希望增强控件的外观,则可以创建一个新的ControlTemplate。一个HeaderedContentControl是用于创建自定义的控件,因为它提供了与头单内容控制模型非常有用。

此控件的依赖项属性可以由控件的默认样式设置。如果使用默认样式设置属性,则当控件出现在应用程序中时,该属性可能会从其默认值更改。默认样式由运行应用程序时使用的桌面主题确定。有关更多信息,请参见默认WPF主题

public class HeaderedContentControl : ContentControl
    {
        public static readonly System.Windows.DependencyProperty HasHeaderProperty;
        public static readonly System.Windows.DependencyProperty HeaderProperty;
        public static readonly System.Windows.DependencyProperty HeaderStringFormatProperty;
        public static readonly System.Windows.DependencyProperty HeaderTemplateProperty;
        public static readonly System.Windows.DependencyProperty HeaderTemplateSelectorProperty;

        //获取一个指示标头是否为 null 的值。
        public bool HasHeader { get; }

        //获取或设置每个控件的标题所用的数据。
        public object Header { get; set; }

        //获取或设置一个撰写字符串,该字符串指定如果 Header 属性显示为字符串,应如何设置该属性的格式。
        public string HeaderStringFormat { get; set; }

        //获取或设置用于显示控件标头的内容的模板。
        public System.Windows.DataTemplate HeaderTemplate { get; set; }

        //获取或设置一个数据模板选择器,以提供自定义逻辑来选择用于显示标头的模板。
        public System.Windows.Controls.DataTemplateSelector HeaderTemplateSelector { get; set; }

        //获取 ControlTemplate 的逻辑子元素的枚举器。
        protected internal override System.Collections.IEnumerator LogicalChildren { get; }

        //在 Header 的 HeaderedContentControl 属性更改时调用。
        protected virtual void OnHeaderChanged(object oldHeader, object newHeader);

        //当 HeaderStringFormat 属性更改时调用。
        protected virtual void OnHeaderStringFormatChanged(string oldHeaderStringFormat, string newHeaderStringFormat);

        //当 HeaderTemplate 属性更改时调用。
        protected virtual void OnHeaderTemplateChanged(System.Windows.DataTemplate oldHeaderTemplate, System.Windows.DataTemplate newHeaderTemplate);

        //当 HeaderTemplateSelector 属性更改时调用。
        protected virtual void OnHeaderTemplateSelectorChanged(System.Windows.Controls.DataTemplateSelector oldHeaderTemplateSelector, System.Windows.Controls.DataTemplateSelector newHeaderTemplateSelector);

        //提供 HeaderedContentControl 的字符串表示形式。
        public override string ToString();
    }

2.4.4 TabItem

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

TabItem 为 HeaderedContentControl。 它的内容属性为 Content ,并且其标头属性为 Header 。 有关更多信息,请参见 HeaderedContentControl 类。

自定义 TabControl 控件

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

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

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

public class TabItem : HeaderedContentControl
    {
        public static readonly System.Windows.DependencyProperty IsSelectedProperty;
        public static readonly System.Windows.DependencyProperty TabStripPlacementProperty;

        //获取或设置一个值,该值指示是否选择 TabItem。
        public bool IsSelected { get; set; }

        //获取选项卡区域位置。
        public System.Windows.Controls.Dock TabStripPlacement { get; }

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

        //当 Content 属性更改时调用。
        protected override void OnContentChanged(object oldContent, object newContent);

        //当 ContentTemplate 属性更改时调用。
        protected override void OnContentTemplateChanged(System.Windows.DataTemplate oldContentTemplate, System.Windows.DataTemplate newContentTemplate);

        //当 ContentTemplateSelector 属性更改时调用。
        protected override void OnContentTemplateSelectorChanged(System.Windows.Controls.DataTemplateSelector oldContentTemplateSelector, System.Windows.Controls.DataTemplateSelector newContentTemplateSelector);

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

        //响应 MouseLeftButtonDown 事件。
        protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer();

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

        //调用以指示 IsSelected 属性已更改为 true。
        protected virtual void OnSelected(System.Windows.RoutedEventArgs e);

        //调用以指示 IsSelected 属性已更改为 false。
        protected virtual void OnUnselected(System.Windows.RoutedEventArgs e);
    }

 

参考微软MSDN