WPF 内容模型
Windows Presentation Foundation(WPF)是一个演示平台,它提供许多控件和类似控件的类型,其主要用途是显示不同类型的内容。 若要确定要使用的控件或派生自哪个控件,应了解特定控件最能显示的对象类型。
本主题总结了 WPF 控件和类似控件的类型的内容模型。 内容模型描述可在控件中使用的内容。 本主题还列出了每个内容模型的内容属性。 内容属性是用于存储对象内容的属性。
包含任意内容的类
某些控件可以包含任何类型的对象,例如字符串、DateTime 对象或作为其他项容器的 UIElement。 例如,Button 可以包含图像和某些文本;或 CheckBox 可以包含 DateTime.Now的值。
WPF 有四个类可以包含任意内容。 下表列出了继承自 Control的类。
包含任意内容的类 | 内容 |
---|---|
ContentControl | 单个任意对象。 |
HeaderedContentControl | 标头和单个项,这两项都是任意对象。 |
ItemsControl | 任意对象的集合。 |
HeaderedItemsControl | 标题和一个项目集合,所有这些都是任意对象。 |
从这些类继承的控件可以包含相同类型的内容,并采用相同方式处理内容。 下图显示了包含图像和某些文本的每个内容模型中的一个控件:
包含单个任意对象的控件
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。
有关如何创建 TabItem 对象的示例,请参阅 HeaderedContentControl。
包含任意对象的集合的控件
ItemsControl 类继承自 Control,可以包含多个项,例如字符串、对象或其他元素。 其内容属性是 ItemsSource 和 Items。 ItemsSource 通常用于使用数据集合填充 ItemsControl。 如果不想使用集合填充 ItemsControl,可以使用 Items 属性添加项。
以下控件继承自 ItemsControl 并使用其内容模型:
下图显示了包含这些类型的项的 ListBox:
包含标题和任意对象集合的控件
HeaderedItemsControl 类继承自 ItemsControl,可以包含多个项,例如字符串、对象或其他元素以及标头。 它继承 ItemsControl 内容属性、ItemsSource和 Items,并定义可以是任意对象的 Header 属性。
以下控件继承自 HeaderedItemsControl 并使用其内容模型:
包含 UIElement 对象集合的类
Panel 类定位并排列子 UIElement 对象。 其内容属性是 Children。
以下类继承自 Panel 类并使用其内容模型:
有关详细信息,请参阅 面板概述。
影响 UIElement 外观的类
Decorator 类将视觉效果应用到单个 UIElement 子对象上或应用到其周围。 其内容属性为Child。 以下类继承自 Decorator 并使用其内容模型:
下图显示了一个 TextBox,它周围有一个(装饰有)Border。
带边框的文本块
提供 UIElement 相关视觉反馈的类
Adorner 类向用户提供视觉提示。 例如,使用 Adorner 向元素添加功能句柄或提供有关控件的状态信息。 Adorner 类提供了一个框架结构,使你可以创建自己的装饰器。 WPF 不会提供任何实现的装饰器。 有关详细信息,请参阅装饰器概述。
允许用户输入文本的类
WPF 提供三个主要控件,使用户能够输入文本。 每个控件以不同的方式显示文本。 下表列出了这三个与文本相关的控件、显示文本时的功能以及包含控件文本的属性。
控件 | 文本显示方式 | 内容属性 |
---|---|---|
TextBox | 纯文本 | Text |
RichTextBox | 带格式的文本 | Document |
PasswordBox | 隐藏的文本(字符被屏蔽) | Password |
显示文本的类
多个类可用于显示纯文本或带格式的文本。 可以使用 TextBlock 显示少量文本。 如果要显示大量文本,请使用 FlowDocumentReader、FlowDocumentPageViewer或 FlowDocumentScrollViewer 控件。
TextBlock 有两个内容属性:Text 和 Inlines。 如果要显示使用一致格式的文本,Text 属性通常是最佳选择。 如果打算在整个文本中使用不同的格式,请使用 Inlines 属性。 Inlines 属性是 Inline 对象的集合,用于指定如何设置文本格式。
下表列出了 FlowDocumentReader、FlowDocumentPageViewer和 FlowDocumentScrollViewer 类的内容属性。
控件 | 内容属性 | 内容属性类型 |
---|---|---|
FlowDocumentPageViewer | 文档 | IDocumentPaginatorSource |
FlowDocumentReader | 文档 | FlowDocument |
FlowDocumentScrollViewer | 文档 | FlowDocument |
FlowDocument 实现 IDocumentPaginatorSource 接口;因此,所有三个类都可以将 FlowDocument 作为内容。
设置文本格式的类
TextElement 及其相关类允许设置文本格式。 TextElement 对象包含和格式化 TextBlock 和 FlowDocument 对象中的文本。 两种主要类型的 TextElement 对象是 Block 元素和 Inline 元素。 Block 元素表示文本块,如段落或列表。 Inline 元素标识块中的部分文本。 许多 Inline 类为应用这些类的文本指定格式。 每个 TextElement 都有自己的内容模型。 有关详细信息,请参阅 TextElement 内容模型概述。