FlowDocument in WPF

 

文档元素

  文档元素是用来处理文档的呈现方式。WPF文档一般分为两大类,流式布局和固定布局。FixedDocument元素就是用来设计那种所见即所得的固定布局。也就是说你在设计时,文档的格式是什么,在呈现时它的格式也是什么,没有任何的差异。

  而用FlowDocument元素构建的流式布局文档在呈现时具备更好的灵活性,并且也提高了文档的可读性。流式布局文档的呈现效果是由多种因素决定的,例如屏幕和页面的大小、字体大小,以及用户的喜好所作的设置。流式布局文档是由一个或多个自Block或者Inline派生的元素组成的。Block、Figure、Floater、List、ListItem、Paragraph、Section、Table和TableCell等Block元素通常是用来组织和格式化文本块。而Inline元素则是用来格式化文本块中的文本信息,Inline元素主要包括Bold、AccessKey、LineBreak、Hyperlink、Italic、Subscript、Superscript和Underline。

 

  Flow Document是Block的集合,所有Block都是从System.Windows.Documents.Block。Block又是从 ContentElement派生而来,ContentElement 是 WPF 中专门为文档定义优化的一个相当低级别的类。这类似于用来定义 WPF 界面的控件--它们都从UIElement 派生而来。两者的继承树在概念上很相似,但并不完全相同。这意味着 WPF控件和块不能直接组合。例如Paragraph中不能直接包含对类似Button的定义,但它可以通过特殊 BlockUIContainer块类包含任何 WPF 控件。这意味着,流文档可以包含所有类型的 WPF元素(包括交互式用户界面、媒体和三维元素),而从另一个角度看,流文档也可是任何 WPF用户界面的一部分,例如可以是控件内容的一个高级布局元素,也可以是一个真正的元素。

  一些文档元素看起来是不是似曾相识,例如Paragraph、Table和Italic。是的,我们其它的一些用户界面标记语言中也会用到这些类似的格式化元素,例如HTML中的<p>、<table>和<i>。虽然它们的实现机制都差不多,但是XAML中的文档元素包含了丰富的属性,这是相应的HTML副本所不具备的。

 

下图演示最常与流内容一起使用的对象:


Block
派生类

Paragraph

Paragraph 通常用于将内容分组到一个段落中。Paragraph 的最简单且最常见的用途是创建文本段落。

Section

Section 只用于包含其他 Block 派生元素。

它不会向其中包含的元素应用任何默认格式。不过,在 Section 上设置的任何属性值都适用于其子元素。使用节能够以编程方式循环访问其子级的集合。

Section 的使用方式类似于 HTML 中的 <DIV> 标记。

BlockUIContainer

使 UIElement 元素(例如 Button)能够嵌入到 Block 派生的流内容中。一个 BlockUIContainer 最多只能直接承载一个 UIElement 子级。 但是,由 BlockUIContainer 承载的子元素可承载它自己的子级。

List

List 用于创建项目符号列表或编号列表。

MarkerStyle 属性设置为 TextMarkerStyle 枚举值可确定列表的样式。

Table

Table 用于创建表。

Table 类似于 Grid 元素,但是它具有更多功能

 

Inline 派生类

Inline 元素通常用作在屏幕上呈现的内容的直接容器。例如,一个 ParagraphBlock 元素)可包含一个 RunInline 元素),而 Run 实际包含在屏幕上呈现的文本。

Run

Run 用于包含无格式文本。

您可能预期 Run 对象会在流内容中广泛使用,不过,在标记中不需要显式使用 Run 元素。

Span

Span 将其他 Inline 内容元素组织到一起。

对于 Span 元素中的内容,不应用任何继承呈现。

但是,从 Span 继承的元素(包括 HyperlinkBoldItalic Underline)确实会向文本应用格式。

InlineUIContainer

InlineUIContainer 使 UIElement 元素(即像 Button 这样的控件)能够嵌入到 Inline 内容元素中。

是与BlockUIContainer 等效的 Inline 元素。

Figure Floater

通过 Figure Floater,可以使用定位属性在流文档中嵌入内容,这些定位属性可独立于主内容流进行自定义。

Figure Floater 元素通常用于突出显示或强调内容的某些部分、在主内容流中承载支持图像或其他内容、或者插入不密切相关的内容(例如广告)。

Figure

·         可定位:可以设置其水平和垂直定位点,以便相对于页面、内容、栏或段落进行停靠。还可以使用其 HorizontalOffset VerticalOffset 属性指定任意偏移量。

·         可将其大小调整为栏大小的几倍:可以将 Figure 的高度和宽度设置为页面、内容或栏的高度或宽度的倍数。请注意,对于页面和内容,倍数不能大于 1。例如,可以将 Figure 的宽度设置为页面的 0.5 内容的 0.25 栏的 2 。还可以将高度和宽度设置为绝对像素值。

·         不分页:如果 Figure 中的内容无法容纳在 Figure 内部,它会呈现能够容纳的内容部分,而其余内容将丢失

Floater

·         无法定位,可在能够为其提供空间的任何位置呈现。不能设置偏移量或锚定 Floater

·         不能将其大小设置为栏大小的几倍:默认情况下,Floater 的大小为一个栏大小。它有一个可设置为绝对像素值的 Width 属性,但是如果此值大于一个栏宽,则将其忽略并将浮动对象的大小设置为一个栏大小。可以通过设置正确的像素宽度,将其大小设置为小于一个栏大小,但不能相对于栏调整大小,因此栏的 0.5 不是 Floater 宽度的有效表达式。Floater 没有高度属性,因此无法设置其高度;其高度取决于内容。

·         Floater 分页:如果指定宽度的内容超出了一个栏的高度,则浮动对象会断开并显示到下一栏、下一页中等等。

如果希望控制大小和定位,并且确信内容适合于指定的大小,那么 Figure 非常适合于放置独立内容。Floater 适合放置流动方式与主页内容类似但独立于主页内容的、具有更大流动自由度的内容。

LineBreak

LineBreak 导致在流内容中发生换行。

内容架构

不同流内容元素的数量是如此之多,因此了解某个元素可包含的子元素的类型是非常困难的。下面的关系图概述了流元素的包容规则。箭头表示可能存在的父/子关系。



自定义文本

TextDecorations

使用文本修饰,可以向文本应用下划线、上划线、基线和删除线效果

Typography

版式用于控制文本的版式特征/变体(即小型大写字母或大型大写字母、上标和下标等)。

摘自:http://www.cnblogs.com/jacksonyin/archive/2008/09/18/1109416.html

 

还发现一个详细介绍FlowDocument的文章:http://bbs.cnw.com.cn/viewthread.php?tid=124974

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值