技术开发 频道

WPF使用流文档灵活地显示内容

IT168 技术文档】

    Windows® Presentation Foundation (WPF) 提供了一系列功能。事实上,功能是如此之多,以至于其中一些非常重要的功能都没有得到应有的关注。一个最好的例子就是“流文档”功能,它可让开发人员在 WPF 中本机创建文档。“流文档”针对屏幕显示以及提供更动态和可以论证的更复杂模型。“流文档”几乎适用于与文本内容相关的所有方面,从产品说明到整本书籍。

    文本显示无疑是更重要的 UI 功能之一。在 WPF 界面中,您通常使用标签等控件来显示文本。但是在许多情形下,您需要的不只是简单地显示几个单词。流文档提供了一种更高级的方法,而它们实质上非常简单。它们通过类似 HTML 文档的格式定义文本流,但其功能更强大,并可提供明显更先进的布局选项。

    通常使用基于 XML 的标准标记语言——可扩展应用程序标记语言 (XAML) 来定义“流文档”。XAML 对于流文档特别直观,主要是因为它与 HTML 类似。以下流文档示例创建了一段文字,并只对其中几个单词应用了粗体格式:

<FlowDocument xmlns=’http://schemas.microsoft.com/winfx/2006/xaml/presentation’ xmlns:x=’http://schemas.microsoft.com/winfx/2006/xaml’> <Paragraph>The quick <Bold>brown fox</Bold> jumps over the lazy dog. </Paragraph> </FlowDocument>

    可以看到,与 HTML 的相似性比在其他 XAML UI 中更明显。真正的元素名称是不同的,但是至少对简单的文档来说,模式非常相似。流文档一般以包含多个块的 FlowDocument 根元素开头。“块”是指流内的元素,通常是如上例所示的文本段落(当然还有其他块类型)。段落又可以包含其他元素,例如本例中的两个粗体单词。请注意,对于任何其他 XAML 文档,根元素必须包含 XAML 特定的命名空间定义,否则无法被识别。这是 XAML 特定的实现细节,与流文档无关。请注意,命名空间定义只在独立的流文档中才需要。(流文档可以是更大的 XAML UI 的一部分,在这种情况下,该 UI 的根元素中会包含命名空间定义。)
    当然,用户永远不会看到流文档的 XAML(而 HTML 源则可在浏览器中查看),这与他们无法看到任何其他 UI 元素的 XAML 一样。相反,用户看到的是文档的最终呈现。对于这个特定的示例,您可通过多种方式看到结果。或许最简单的方式是将其键入 Windows SDK 附带的实用工具 XamlPad 中(请参见图 1)。

图 1 XamlPad 中显示的极其简单的流文档 (单击该图像获得较大视图)
    当然,这是一个非常简单的例子,文档的定义和嵌入式布局会复杂得多。流文档支持您能想到的所有格式,例如斜体、下划线、字体颜色和字体等。图2显示的是一个稍微高级的示例,其结果可在图 3 中看到。

图2 更多格式和项目符号列表

<FlowDocument xmlns=’http://schemas.microsoft.com/winfx/2006/xaml/presentation’ xmlns:x=’http://schemas.microsoft.com/winfx/2006/xaml’> <Paragraph FontFamily=”Calibri” FontWeight=”Bold” FontSize=”24”> WPF Flow Documents</Paragraph> <Paragraph>WPF Flow Documents are <Italic>quite sophisticated</Italic>. They support all common layout options, as well as many you probably do <Span Foreground=”Red”>not expect</Span>.</Paragraph> <List> <ListItem><Paragraph>First List Item</Paragraph></ListItem> <ListItem><Paragraph>Second List Item</Paragraph></ListItem> <ListItem><Paragraph>Third List Item</Paragraph></ListItem> </List> <Paragraph>Of course, Flow Documents also support the definition of <Bold><Span FontFamily=”Comic Sans MS” FontSize=”24” Foreground=”Blue”>in line</Span></Bold> font sizes and font faces. </Paragraph> </FlowDocument>



图 3 带有稍微高级格式的流文档 (单击该图像获得较大视图)
    本示例显示的是带有内嵌格式的若干段落。它还提供另一类型块元素的第一个示例,即列表,毫无疑问,它包含多个列表项。请注意,每个列表项反过来也只是包含更多块元素的容器。因此,我不是简单地将文本置于一个列表项中,而是向每个列表项中添加一个段落元素。就此而论,我应该已向每个列表项或任何其他块类型添加了多个段落。这可以让您在列表的单个列表项内创建高级布局,这在 HTML 等格式中一般行不通,因为此类格式只会让简单的文本字符串流向每个列表元素。

0
相关文章