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的详细介绍,可以看看我另外两篇文章。
里面会详细介绍他们的特性以及实现类。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_42068856/article/details/122050999