首页 > 其他分享 >WPF FlowDocument结构详解

WPF FlowDocument结构详解

时间:2024-04-04 21:57:37浏览次数:15  
标签:承载 FlowDocument 链表 详解 Inline WPF Block 结构

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

标签:承载,FlowDocument,链表,详解,Inline,WPF,Block,结构
From: https://www.cnblogs.com/cdaniu/p/18114986

相关文章

  • MySQL 索引详解
    为什么要使用索引?通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。可以大大加快数据的检索速度(大大减少的检索的数据量), 这也是创建索引的最主要的原因。帮助服务器避免排序和临时表。将随机IO变为顺序IO可以加速表和表之间的连接,特别是在实现数据的参考完整......
  • dc-2靶机-超详解
    dc-2内网靶1、信息收集入站信息nmap扫描nmap-A-p--v192.168.27.0/24得到消息:IP:192.168.227.139cms:wordpress4.7.10开放端口及服务:80(http)、7744(ssh)页面信息访问ip发现跳转,猜测可能是域名重定向修改hosts文件重新访问,访问成功发现flag1访问成功发现fl......
  • git版本控制工具详解
    认识版本控制(版本控制)◼什么是版本控制?版本控制的英文是Versioncontrol;是维护工程蓝图的标准作法,能追踪工程蓝图从诞生一直到定案的过程;版本控制也是一种软件工程技巧,借此能在软件开发的过程中,确保由不同人所编辑的同一程序文件都得到同步;◼简单来说,版本控制在软......
  • 《手把手教你》系列技巧篇(七十)-java+ selenium自动化测试-Java中如何读取properties配
     1.简介Java自动化测试开发中,需要将一些易变的配置参数放置再XML配置文件或者properties配置文件中。然而XML配置文件需要通过DOM或SAX方式解析,而读取properties配置文件就比较容易。因此今天宏哥讲解和分享如何读取properties配置文件的内容。2.properties文件......
  • 【云原生篇】k8s之Deployment详解
    Kubernetes的Deployment是一种管理声明式更新的资源对象,它允许你描述应用的期望状态,并由Deployment控制器自动将当前状态改变为期望状态。Deployment主要用于无状态应用的部署和扩展,但也可以用于有状态应用。核心功能自动化部署与回滚:Deployment可以自动更新应用的......
  • 【云原生篇】K8S之StatefulSet 详解
    在Kubernetes(K8s)中,StatefulSet是一种用于管理有状态应用的工作负载API对象。与Deployment管理无状态应用不同,StatefulSet为每个Pod副本提供了持久性标识符(如名称和网络标识),并且可以保证部署和扩展顺序、以及网络标识和存储的稳定性。核心特性稳定、唯一的网......
  • Python+requests+Pytest+logging+allure+pymysql框架详解
    一、框架目录结构1)tools目录用来放公共方法存储,如发送接口以及读取测试数据的方法,响应断言数据库断言前置sql等方法;2)datas目录用例存储接口用例的测试数据,我是用excel来存储的数据,文件数据图片数据等;3)testcases目录用来存放测试用例,一个python文件对应一个接口模块的......
  • Python常用算法思想--递归算法思想详解【附源码】
    递归算法能够重复性的将问题分解为同类的子问题,然后解决这些子问题,最终达到解决最开始的问题为目的。以下从解决“阶乘”问题、“汉诺塔”问题、“斐波那契数列”问题、“最大公倍数和最小公约数”问题、“小球弹跳”、“深度优先”与“广度优先”问题等六个经典递归算法的案例......
  • 基于深度学习的犬种识别系统详解(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
    摘要:本文深入研究了基于YOLOv8/v7/v6/v5等深度学习模型的犬种识别技术,核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,进行性能指标对比;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码,及基于Streamlit的交互式Web应用界面设计。在Web网页中可以支持图像、视......
  • 【递推与递归】python例题详解
    文章目录1、递归实现指数型枚举2、递归实现排列型枚举3、递归实现组合型枚举4、简单斐波那契5、带分数6、翻硬币1、递归实现指数型枚举题目从 1∼n这 n个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数 n。输出格式每行输出一种方案。同一......