WPF 内容模型

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

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

本主题包括下列各节。

  • 包含任意内容的类
  • 包含 UIElement 对象集合的类
  • 影响 UIElement 外观的类
  • 提供有关 UIElement 的可视反馈的类
  • 可让用户输入文本的类
  • 显示文本的类
  • 设置文本格式的类
  • 相关主题

包含任意内容的类

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

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

包含任意内容的类

Content

ContentControl

一个任意对象。

HeaderedContentControl

一个标头和一个项,二者都是任意对象。

ItemsControl

任意对象的集合。

HeaderedItemsControl

一个标头和一组项,它们都是任意对象。

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

Button、GroupBox、Listbax、TreeViewItem

包含一个任意对象的控件

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

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

具有不同类型内容的四个按钮

四个按钮

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

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

HeaderedContentControl 类继承自 ContentControl 并显示内容和一个标头。 它从 ContentControl 继承内容属性 Content,并定义类型为 ObjectHeader 属性;因此,这两者都可以是任意对象。

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

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

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

TabControl

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

包含任意对象集合的控件

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

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

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

包含多个类型对象的 ListBox

具有四种类型的内容的 ListBox

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

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

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

包含 UIElement 对象集合的类

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

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

有关更多信息,请参见面板概述

影响 UIElement 外观的类

Decorator 类在单一子级 UIElement 之上或周围应用视觉效果。 其内容属性为 Child。 以下类继承自 Decorator 并使用其内容模型:

下图显示了一个周围具有(即装饰有)BorderTextBox

具有边框的 TextBlock

具有黑色边框的 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

Document

FlowDocument

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

设置文本格式的类

使用 TextElement 及其相关类可以设置文本的格式。 TextElement 对象包含 TextBlockFlowDocument 对象中的文本,并设置这些文本的格式。 两种主要类型的 TextElement 对象为 Block 元素和 Inline 元素。 Block 元素代表文本块,例如段落或列表。 Inline 元素代表块中的一部分文本。 许多 Inline 类都指定它们应用于的文本的格式。 每个 TextElement 都具有它自己的内容模型。 有关更多信息,请参见 TextElement 内容模型概述

请参见

其他资源

WPF 基础