WPF 内容模型

Windows Presentation Foundation (WPF) 是一个演示平台,提供了许多控件和类似控件的类型,主要用于显示不同类型的内容。 若要确定所要使用的控件或要从其派生的控件,应该了解特定控件可以最佳效果显示的对象类型。

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

包含任意内容的类

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

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

包含任意内容的类 内容
ContentControl 一个任意对象。
HeaderedContentControl 一个标头和一个项(两者都是任意对象)。
ItemsControl 一个任意对象集合。
HeaderedItemsControl 一个标头和一个项集合(全部都是任意对象)。

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

Screenshot that shows four different controls, one from each content model.

包含一个任意对象的控件

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

下图显示了四个按钮,它们的 Content 设置为字符串、DateTime 对象、Rectangle 和包含 EllipseTextBlockPanel

Screenshot that shows four buttons with different content types.

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

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

HeaderedContentControl 类继承自 ContentControl 并显示包含标题的内容。 它继承内容属性 Content,后者继承自 ContentControl 并定义具有 Object 类型的 Header;因此两者都可以是任意对象。

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

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

TabControl that uses different types in the Header property.

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

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

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

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

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

Screenshot that shows a ListBox with four types of content.

包含一个标头和一个任意对象集合的控件

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

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

包含一个 UIElement 对象集合的类

Panel 类定位和排列 UIElement 子对象。 它的内容属性为 Children

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

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

影响 UIElement 外观的类

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

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

TextBox with black border
具有边框的 TextBlock

提供 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 内容模型概述

另请参阅