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 并显示包含标题的内容。 它继承内容属性 Content,后者继承自 ContentControl 并定义具有 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。
具有边框的 TextBlock
提供 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 内容模型概述。