FlowDocument
一、介绍
FlowDocument
是WPF中的流文档,用来承载大段文章。可以用来显示文章。或者在RichTextBox
中编辑文章。
FlowDocument
没有多少方法,但有大量的属性,用来设置文章的字体,字体大小,前景色,背景色之类的。
但这些都没什么特别的,最重要的,是FlowDocument
的结构。
二、FlowDocument的结构
一个流文档(文章)可以分为3层。
最顶层是FlowDocument
,相当于一篇文章,包含了复数个段落。
第二层是Block
,相当于一个段落,包含了复数个句子。
最底层是Inline
,相当于一个句子,用于承载具体内容。
同时,每一层的结构都是一个链表。
虽然Block
和Inline
都有多个实现类,但本文探讨的是抽象的结构,因此,使用抽象父类来解释更好理解。
1.第一层FlowDocument
FlowDocument
的属性Blocks
,承载了第二层所有Block
。
因为是链表结构,所以不能根据下标获取指定的Block
。
但有两个属性FirstBlock
和LastBlock
用于链表第一个Block
和最后一个Block
。
2.第二层Block
Block
是一个抽象父类,指代一种块级元素,意思就是,一定会换行。
因为是链表结构,每一个Block
也可以获取它的上一个Block
或下一个Block
。
他有多种实现形式,有时是包含多个Inline
的段落,有时也是包含多个Block
的大段落。
Block
的其中两种实现
2.1 Section
也用来承载复数Block
。因此也有一个Blocks
属性。结构和FlowDocument
相同。
2.2 Paragraph
用来承载复数Inline
。他有一个Inlines
属性。承载了第三层的Inline
。也是链表结构,所有也不能根据下标获取指定的Inline
。使用FirstInline
和LastInline
来表示第一个Inline
和最后一个Inline
。
3.第三层Inline
Inline
也是抽象父类,指代一种行级元素,意思是,不一定会换行。
每一个Inline
也可以获取他的上一个Inline
或下一个Inline
。
也有多种实现形式,有时是包含文字的句子,有时也可以包含多个Inline
的大句子。
Inline
的其中两种实现。
3.1 Run
用来承载文字。他的关键属性Text
。赋值后就可以显示,可以说是FlowDocument
中最底层,直接显示文字的类。结构到这里就算结束了。
3.2 Span
用来承载复数Inline
。也有一个Inlines
属性,结构和Section
相同。
以上,结构介绍完毕。可以看出Block
和Inline
结构也非常相似。
他们都是链表。
他们都可以作为容器承载复数条同一级的元素。
三、更多情报
关于Block
和Inline
的详细介绍,可以看看我另外两篇文章。
里面会详细介绍他们的特性以及实现类。
关于Block
: WPF FlowDocument中的Block级元素
关于Inline
: WPF FlowDocument中的Inline级元素