WPF 内容模型

Windows Presentation Foundation(WPF)是一个演示平台,它提供许多控件和类似控件的类型,其主要用途是显示不同类型的内容。 若要确定要使用的控件或派生自哪个控件,应了解特定控件最能显示的对象类型。

本主题总结了 WPF 控件和类似控件的类型的内容模型。 内容模型描述可在控件中使用的内容。 本主题还列出了每个内容模型的内容属性。 内容属性是用于存储对象内容的属性。

包含任意内容的类

某些控件可以包含任何类型的对象,例如字符串、DateTime 对象或作为其他项容器的 UIElement。 例如,Button 可以包含图像和某些文本;或 CheckBox 可以包含 DateTime.Now的值。

WPF 有四个类可以包含任意内容。 下表列出了继承自 Control的类。

包含任意内容的类 内容
ContentControl 单个任意对象。
HeaderedContentControl 标头和单个项,这两项都是任意对象。
ItemsControl 任意对象的集合。
HeaderedItemsControl 标题和一个项目集合,所有这些都是任意对象。

从这些类继承的控件可以包含相同类型的内容,并采用相同方式处理内容。 下图显示了包含图像和某些文本的每个内容模型中的一个控件:

显示四个不同的控件的屏幕截图,其中一个控件来自每个内容模型。

包含单个任意对象的控件

ContentControl 类包含一段任意内容。 其内容属性是 Content。 以下控件继承自 ContentControl 并使用其内容模型:

下图显示了四个按钮,其 Content 设置为字符串、DateTime 对象、Rectangle以及包含 EllipseTextBlockPanel

显示四个具有不同内容类型的按钮的屏幕截图。

有关如何设置 Content 属性的示例,请参阅 ContentControl

包含标头和单个任意对象的控件

HeaderedContentControl 类继承自 ContentControl,并使用标头显示内容。 它从 ContentControl 继承内容属性 Content,并定义 Object类型的 Header 属性;因此,两者都可以是任意对象。

以下控件继承自 HeaderedContentControl 并使用其内容模型:

下图显示了两个 TabItem 对象。 第一个 TabItem 具有作为 HeaderContentUIElement 对象。 Header 设置为包含 EllipseTextBlockStackPanelContent 设置为包含 TextBlockLabelStackPanel。 第二个 TabItemHeader 中包含字符串,并在 Content 中包含 TextBlock

在 Header 属性中使用不同类型的 TabControl。

有关如何创建 TabItem 对象的示例,请参阅 HeaderedContentControl

包含任意对象的集合的控件

ItemsControl 类继承自 Control,可以包含多个项,例如字符串、对象或其他元素。 其内容属性是 ItemsSourceItemsItemsSource 通常用于使用数据集合填充 ItemsControl。 如果不想使用集合填充 ItemsControl,可以使用 Items 属性添加项。

以下控件继承自 ItemsControl 并使用其内容模型:

下图显示了包含这些类型的项的 ListBox

显示包含四种类型的内容的 ListBox 的屏幕截图。

包含标题和任意对象集合的控件

HeaderedItemsControl 类继承自 ItemsControl,可以包含多个项,例如字符串、对象或其他元素以及标头。 它继承 ItemsControl 内容属性、ItemsSourceItems,并定义可以是任意对象的 Header 属性。

以下控件继承自 HeaderedItemsControl 并使用其内容模型:

包含 UIElement 对象集合的类

Panel 类定位并排列子 UIElement 对象。 其内容属性是 Children

以下类继承自 Panel 类并使用其内容模型:

有关详细信息,请参阅 面板概述

影响 UIElement 外观的类

Decorator 类将视觉效果应用到单个 UIElement 子对象上或应用到其周围。 其内容属性为Child。 以下类继承自 Decorator 并使用其内容模型:

下图显示了一个 TextBox,它周围有一个(装饰有)Border

具有黑色边框的 TextBox
带边框的文本块

提供 UIElement 相关视觉反馈的类

Adorner 类向用户提供视觉提示。 例如,使用 Adorner 向元素添加功能句柄或提供有关控件的状态信息。 Adorner 类提供了一个框架结构,使你可以创建自己的装饰器。 WPF 不会提供任何实现的装饰器。 有关详细信息,请参阅装饰器概述

允许用户输入文本的类

WPF 提供三个主要控件,使用户能够输入文本。 每个控件以不同的方式显示文本。 下表列出了这三个与文本相关的控件、显示文本时的功能以及包含控件文本的属性。

控件 文本显示方式 内容属性
TextBox 纯文本 Text
RichTextBox 带格式的文本 Document
PasswordBox 隐藏的文本(字符被屏蔽) Password

显示文本的类

多个类可用于显示纯文本或带格式的文本。 可以使用 TextBlock 显示少量文本。 如果要显示大量文本,请使用 FlowDocumentReaderFlowDocumentPageViewerFlowDocumentScrollViewer 控件。

TextBlock 有两个内容属性:TextInlines。 如果要显示使用一致格式的文本,Text 属性通常是最佳选择。 如果打算在整个文本中使用不同的格式,请使用 Inlines 属性。 Inlines 属性是 Inline 对象的集合,用于指定如何设置文本格式。

下表列出了 FlowDocumentReaderFlowDocumentPageViewerFlowDocumentScrollViewer 类的内容属性。

控件 内容属性 内容属性类型
FlowDocumentPageViewer 文档 IDocumentPaginatorSource
FlowDocumentReader 文档 FlowDocument
FlowDocumentScrollViewer 文档 FlowDocument

FlowDocument 实现 IDocumentPaginatorSource 接口;因此,所有三个类都可以将 FlowDocument 作为内容。

设置文本格式的类

TextElement 及其相关类允许设置文本格式。 TextElement 对象包含和格式化 TextBlockFlowDocument 对象中的文本。 两种主要类型的 TextElement 对象是 Block 元素和 Inline 元素。 Block 元素表示文本块,如段落或列表。 Inline 元素标识块中的部分文本。 许多 Inline 类为应用这些类的文本指定格式。 每个 TextElement 都有自己的内容模型。 有关详细信息,请参阅 TextElement 内容模型概述

另请参阅