技术开发 频道

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

    其中一个相关的设置是列规则,它允许在列之间定义一个可视元素。请看此例(其结果见图 15):



图 15 列之间采用简单规则的流文档 (单击该图像获得较大视图)
<FlowDocument ColumnRuleWidth=”5” ColumnRuleBrush=”Red”>
    当然,在许多出版物中,文档并不只是采用简单的列布局。通常还存在从一般流中提取出来的其他元素。您已见过这样的例子,例如将图像置于文档中。图 12 显示了图形设计师常用的一种排列方式。此图像位于两列之间,周围环绕文字,图像方方正正地位于内容中间,并没有影响任何一列的文字布局。这是一种常见的布局选择,只是还不能用于流文档之前我所了解的动态屏幕阅读环境。
   
    创建此类布局的关键是图形块,它允许定义不与文档其余部分那样布局的内容。将图像置于图形标记内部就是一例,但图形还有许多其他用途。例如,您可以使用图形来定义横跨整个文档宽度的标题:
<Paragraph> <Figure HorizontalAnchor=”ContentLeft” VerticalAnchor=”ContentTop” Width=”1Content”> <Paragraph FontSize=”36” FontWeight=”Bold”>Go With The Flow</Paragraph> </Figure> Windows Presentation Foundation in Windows Vista provides a great set of features. </Paragraph>
    在本代码中,图形包含另一个段落,即用作标题的文本。请注意,这里有一些您可用来创建高级、灵活文档的便捷属性。例如,看一下图形的宽度。我没有将宽度设为特定像素数,而是将其设为内容的确切宽度,这会根据整个内容的宽度自动调整图形宽度。

    请看图 16。其中,您会注意到标题(通过图形放置)设为横跨整个内容宽度,这就将所有四列的位置都向下推移了。该图像从垂直和水平方向看都定位于页面中央。



图 16 标题横跨四列 (单击该图像获得较大视图)
    请注意,其宽度与内容相关的图形不必始终与内容一样宽。以下例来说,图形宽度设为内容宽度的 75%:
<Figure Width=”0.75Content”>
    宽度也可与其他项相关,例如列宽。下例图形始终是两列宽(除非只显示一列,那样宽度就会减为一列):
<Figure Width=”2Column”>
    当然,图形高度可通过类似方式定义(虽然图形通常是随着内容纵向变化)。

    另一重要方面是图形的位置。在代码段中,它设为横向定位为靠左,纵向定位为靠上。也就是说,图形会出现在当前内容页面的左上角,而无论其实际如何定义。然而在本示例中,图形被定义为文档的第一个元素,但即使该标题之前已有段落,它也会由于这些设置而被上移和左移。图 12 和图 16 中的照片已按类似方式,将其横向定位为“PageCenter”,在列之间移动。(所有这些设置的可用属性值都可以在 WPF 文档中找到)。

    您可能已经注意到,本文涉及了大量手动编码。例如,每当需要改变字体时,您都要将该信息添加到块或内嵌元素中。到目前为止,这还不是一个大问题,因为大部分示例都很小。但是,如果有一本每 50 页为一章的书,您要改变每一段的字体,每次都手动来改的话,无疑会很繁重。幸运的是,现在有了一个更好的办法:如 WPF 中的其他任何内容一样,流文档支持样式。样式可被定义为实际流文档中指定名称的资源。以下是定义字体信息的样式:
<FlowDocument> <FlowDocument.Resources> <Style x:Key=”MyStyle”> <Setter Property=”TextElement.FontSize” Value=”12” /> <Setter Property=”TextElement.FontFamily” Value=”Bodoni MT” /> </Style> <FlowDocument.Resources> ... </FlowDocument>
    然后,该样式会通过以下方式应用到段落(和其他元素):
<Paragraph Style=”{StaticResource MyStyle}”>The quick... </Paragraph>
    由于流文档的特性,样式特别常用。建议您对于最简单情形之外的任何情形,都使用样式来定义大部分格式选项,而不是通过个别内嵌元素的属性。样式可让您的文档保持紧凑,而且更易维护。

    总结

    希望本文不只让您获得对流文档及其功能的基本了解,而且也激发起您的兴趣。还有许多更高级的功能,包括查看器控件的复杂样式、子类化和延伸文档、块和内嵌元素、数字权限管理、文本和墨迹注释功能以及高级字体格式等,绝对值得您深入研究。
0
相关文章