WPF 内容模型
Windows Presentation Foundation (WPF) 是一个演示平台,提供了许多主要用于显示不同类型内容的控件和类似于控件的类型。 若要确定所要使用的控件或要从其派生的控件,则应了解特定控件可以最佳效果显示的对象类型。
本主题汇总了 WPF 控件和类似于控件的类型的内容模型。 内容模型描述可在控件中使用的内容。本主题还列出了每个内容模型的内容属性。 内容属性是用于存储对象内容的属性。
本主题包括下列各节。
- 包含任意内容的类
- 包含 UIElement 对象集合的类
- 影响 UIElement 外观的类
- 提供有关 UIElement 的可视反馈的类
- 可让用户输入文本的类
- 显示文本的类
- 设置文本格式的类
- 相关主题
包含任意内容的类
某些控件可以包含任何类型的对象,例如字符串、DateTime 对象或作为其他项的容器的 UIElement。 例如,Button 可以包含一幅图像和一些文本;CheckBox 可以包含 DateTime.Now 的值。
WPF 有四个可以包含任意内容的类。 下表列出了从 Control 继承的类。
包含任意内容的类 |
Content |
---|---|
一个任意对象。 |
|
一个标头和一个项,二者都是任意对象。 |
|
任意对象的集合。 |
|
一个标头和一组项,它们都是任意对象。 |
从这些类继承的控件可以包含相同类型的内容,并且可以相同的方式处理这些内容。 下图显示了来自每个内容模型的、包含一个图像和一些文本的控件。
包含一个任意对象的控件
ContentControl 类包含一段任意内容。 其内容属性为 Content。 以下控件继承自 ContentControl 并使用其内容模型:
下图显示了四个按钮,其 Content 分别设置为一个字符串、一个 DateTime 对象、一个 Rectangle 以及一个包含 Ellipse 和 TextBlock 的 Panel。
具有不同类型内容的四个按钮
有关如何设置 Content 属性的示例,请参见 ContentControl。
包含一个标头和一个任意对象的控件
HeaderedContentControl 类继承自 ContentControl 并显示内容和一个标头。 它从 ContentControl 继承内容属性 Content,并定义类型为 Object 的 Header 属性;因此,这两者都可以是任意对象。
以下控件继承自 HeaderedContentControl 并使用其内容模型:
下图显示了两个 TabItem 对象。 第一个 TabItem 具有作为 Header 和 Content 的 UIElement 对象。 Header 设置为包含 Ellipse 和 TextBlock 的 StackPanel。 Content 设置为包含 TextBlock 和 Label 的 StackPanel。 第二个 TabItem 的 Header 中有一个字符串,而 Content 中有一个 TextBlock。
Header 属性中使用不同类型的 TabControl
有关如何创建 TabItem 对象的示例,请参见 HeaderedContentControl。
包含任意对象集合的控件
ItemsControl 类继承自 Control,并且可以包含多个项,例如字符串、对象或其他元素。 其内容属性为 ItemsSource 和 Items。 ItemsSource 通常用于使用数据集合填充 ItemsControl。 如果您不想使用集合填充 ItemsControl,则可以使用 Items 属性添加项。
以下控件继承自 ItemsControl 并使用其内容模型:
下图显示了一个包含这些类型的项的 ListBox:
包含多个类型对象的 ListBox
包含一个标头和一组任意对象的控件
HeaderedItemsControl 类继承自 ItemsControl,并且可以包含多个项,例如字符串、对象或其他元素和标头。 它继承 ItemsControl 内容属性 ItemsSource 和 Items,它还定义可以为任意对象的 Header 属性。
以下控件继承自 HeaderedItemsControl 并使用其内容模型:
包含 UIElement 对象集合的类
Panel 类定位并排列子级 UIElement 对象。 其内容属性为 Children。
以下类继承自 Panel 类并使用其内容模型:
有关更多信息,请参见面板概述。
影响 UIElement 外观的类
Decorator 类在单一子级 UIElement 之上或周围应用视觉效果。 其内容属性为 Child。 以下类继承自 Decorator 并使用其内容模型:
下图显示了一个周围具有(即装饰有)Border 的 TextBox。
具有边框的 TextBlock
提供有关 UIElement 的可视反馈的类
Adorner 类向用户提供可视提示。 例如,使用 Adorner 向元素添加功能控点,或提供有关控件的状态信息。 Adorner 类提供框架,以便您可以创建自己的装饰器。 WPF 不提供任何实现的装饰器。 有关更多信息,请参见装饰器概述。
可让用户输入文本的类
WPF 提供了三个可让用户输入文本的主控件。 每个控件都以不同的方式显示文本。 下表列出了这三个与文本相关的控件、其显示文本时的功能以及其包含控件文本的属性。
控件 |
文本显示为 |
内容属性 |
---|---|---|
纯文本 |
||
格式化文本 |
||
隐藏文本(字符被遮盖) |
显示文本的类
某些类可用于显示纯文本或格式化文本。 您可以使用 TextBlock 显示少量文本。 如果希望显示大量文本,请使用 FlowDocumentReader、FlowDocumentPageViewer 或 FlowDocumentScrollViewer 控件。
TextBlock 具有两个内容属性:Text 和 Inlines。 如果希望显示采用一致格式的文本,Text 属性通常是最佳选择。 如果希望在整个文本中使用不同格式,请使用 Inlines 属性。 Inlines 属性是 Inline 对象的集合,这些对象指定如何设置文本的格式。
下表列出了 FlowDocumentReader、FlowDocumentPageViewer 和 FlowDocumentScrollViewer 类的内容属性。
控件 |
内容属性 |
内容属性类型 |
---|---|---|
文档 |
||
文档 |
||
Document |
FlowDocument 实现 IDocumentPaginatorSource 接口,因此,所有三个类都可以将 FlowDocument 作为内容。
设置文本格式的类
使用 TextElement 及其相关类可以设置文本的格式。 TextElement 对象包含 TextBlock 和 FlowDocument 对象中的文本,并设置这些文本的格式。 两种主要类型的 TextElement 对象为 Block 元素和 Inline 元素。 Block 元素代表文本块,例如段落或列表。 Inline 元素代表块中的一部分文本。 许多 Inline 类都指定它们应用于的文本的格式。 每个 TextElement 都具有它自己的内容模型。 有关更多信息,请参见 TextElement 内容模型概述。