FlowDocument in WPF

WPF学习笔记-FlowDocument实现表格单元格垂直居中以及边框设置 FlowDocument是WPF的高级文档功能(如分页和列)承载流内容和设置流内容格式。其中的块元素Table可以很方便的添加并展示表格,但是其无法实现自动换行,我尝试了网上搜索解决方案以及自己尝试修改。在网上搜索了不同的解决方案,包括手动计算高度,通过Margin属性来实现类似居中的问题,或者尝试在单元格中添加BlockUIContainerl来实现居中,但是实际由于TableCell自身没有居中,或者适应宽度,最终都以失败告终。最终我通过Grid实现了该功能,而且可以跨页自动换行。 阅读详情

 

文档元素

  文档元素是用来处理文档的呈现方式。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 元素通常用作在屏幕上呈现的内容的直接容器。例如,一个 Paragraph(Block 元素)可包含一个 Run(Inline 元素),而 Run 实际包含在屏幕上呈现的文本。

Run

Run 用于包含无格式文本。

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

Span

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

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

但是,从 Span 继承的元素(包括 Hyperlink、Bold、Italic 和 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

WPF FlowDocumentReader文档阅读器的详细使用教程 FlowDocumentReader 是 WPF 中的一个控件,用于呈现和阅读长篇富文本文档。它提供了多种文档视图模式,包括阅读模式、缩放模式和页面模式,用户可以根据需求选择不同的阅读方式。FlowDocumentReader 是专门为阅读和呈现大段文字内容而设计的,支持滚动、分页、文本查找等功能。 阅读详情

相关推荐

显示WPF下FlowDocument(流文档)内容

显示WPF下FlowDocument(流文档)内容,很管用的,有实例

WPF FlowDocument结构详解

FLowDocument

qq_42068856的博客 3737

FlowDocument示例

主要展示了FlowDocument控件的使用方法,包括如何设置文字格式和结构

WPF学习笔记-FlowDocument流文档基础知识和基本操作

WPF中提供了FlowDocument类,用于高级文档功能(如分页和列)承载流内容和设置流内容格式,可以根据自己的需要进行在线编辑,是自定义显示样式,展示大段文章的绝佳利器。FlowDocument的默认值DataTemplateFlowDocument包含一个 FlowDocumentReader ,如果使用 作为 XAML 文件中的根元素,则用于FlowDocument显示文档。

向往的是:佛祖堂前的鱼,静静听禅。 2930

实战演练,如何用Easyexcel合并单元格,设置字体、边框样式,并在尾行加入备注

,实现效果如下:1、多级表头合并2、表头底纹+表格边框3、合并相同数据单元格4、尾行加入备注。

Su7148的博客 1万+

SAP License USMM SLAW2 SAP审计

引言 企业每年都会收到SAP License审计邮件,邮件内容大致就是根据贵公司与SAP签定的合同XXX条款规定,贵公司所安装的SAP系统需要进行测定。 关键字: SAP License、 SAP USMM、 SLAW2、 SAP 账号、SAP 账号审计、 SAP License 审计、 SAP 审计报告、SAP 账号优化 SAP License审计邮件 企业每年都会收到SAP License审计邮件,邮件内容大致就是根据贵公司与SAP签定的合同XXX条款规定,贵公司所安...

感悟人生 2979

WPF学习笔记之9:FlowDocument in WPF

下图演示最常与流内容一起使用的对象: Block 派生类: Paragraph Paragraph 通常用于将内容分组到一个段落中。Paragraph 的最简单且最常见的用途是创建文本段落。 ...

weixin_33932129的博客 396

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程

看过我博客的会发现我写了很多CESM的笔记,但是说实话,平时科研我其实更多时候是GEOS-Chemuser。之所以写了很多CESM笔记,其实是因为不会,就边学边写。然后GEOS-Chem已经用比较熟了,所以也没想过做笔记啥的。但是我发现越来越多朋友私信我各种CESM问题,我觉得我可能给大家营造了一种我是CESM达人的错觉。感觉自己有点跑偏了呢。公平起见,我觉得我有必要补充点GEOS-Chem笔记。 GEOS-Chem是研究大气化学的人常用的大气化学传输模式,在全世界范围的大气化学研究组中被广泛使用。不过.

砍柴姑娘Jourosy的博客 1万+

How can I get a FlowDocument Hyperlink to launch browser and go to URL in a WPF app?

From: https://stackoverflow.com/questions/2288999/how-can-i-get-a-flowdocument-hyperlink-to-launch-browser-and-go-to-url-in-a-wpf   WPF中找指定类型控件列表 (UIElementExtensions.cs)   常用,还老忘 #region Activ

df398286232的专栏 617

小米万兆路由器里的Docker安装可道云(Kodexplorer)私有网盘

小米2022年12月份发布了万兆路由器,里面可以使用Docker。 今天尝试在小米的万兆路由器里安装[可道云](http://kodcloud.com/)(Kodexplorer)私有网盘。

engchina的专栏 1万+

SAP采购订单中项目类别B(限制)的控制逻辑

在笔者所在企业中,框架类采购订单中项目类别需要选择B(限制)。今天笔者从比较全面的角度分析了一下这个项目类别B到底可以决定些什么?控制到什么?先从后台SPRO中打开相应的配置菜单。 打开项目类别B之后,可以看到一些配置信息,这里有一点与其它配置不同的地方,即无法新增项目,也无法修改现有项目。这个疑惑今后再去解决吧。当前只研究项目类别B的控制逻辑。 下面就参考上图中的配置分段来分析和测试其控制逻辑, 1、如项目类别配置图,所需材料值为不允许;经测试,如下图在采购订单创建时,不能输入物料编号条目。

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 6033

MdXaml:将Markdown转换为WPF FlowDocument的强大工具

MdXaml:将Markdown转换为WPF FlowDocument的强大工具 项目介绍 MdXaml 是一个基于 Markdown.Xaml 的修改版本,专门用于将Markdown文本转换为WPF的FlowDocument。FlowDocument是WPF中用于表示富文本内容的文档模型,能够支持复杂的文本布局和样式。通过MdXaml,开发者可以轻松地将Markdown格式的内容嵌入到WPF应用...

gitblog_00298的博客 1543

MINI PCIE接口设计要点:

3.3Vaux(5pins):3.3V电源。PERST#信号通过外接复位电路,可实现模块复位。模块可以通过硬件方式或软件方式关闭射频通信(不包括 GNSS)。LED_WWAN#:(O)漏极开漏,低有效。:(I)低激活系统禁止射频信号(飞行模式),因此需加上拉。UIM_PWR (1 pin):(O)UIM的电源输出。SMB_DATA:SMBus2.0数据信号线。UIM_VPP:(O)A类设备的可变电源电压。SMB_CLK:SMBus2.0时钟信号线。UIM_RESET:(O)UIM的复位信号。

qq_40010777的博客 8243

WPF预览并打印FlowDocument

21 <Button Content="加载" HorizontalAlignment="Center" VerticalAlignment="Center" Width="88" Height="28" Click="Button_Click"></Button>在前面的文章中,介绍过通过FixedDocument进行预览并打印。但是有时候我们可能使用的是。

【微软MVP】zhaotianff的专栏 955

大疆FPGA/芯片开发工程师(A卷)笔试题(含详解)

大疆芯片开发岗A卷 一、单选题 1.下列关于多bit数据跨时钟域的处理思路,错误的有   A、发送方给出数据,接收方用本地时钟同步两拍再使用   B、发送方把数据写到异步fifo,接收方从异步fifo里读出   C、对于连续变化的信号,发送方转为格雷码发送,接收方收到后再转为二进制   D、发送方给出数据,发送方给出握手请求,接收方收到后回复,发送方撤销数据 2.对12.918做无损定点化,需要的最小位宽是多少位,位宽选择11位时的量化误差是多少   A、12位,0.0118   B、13位,0.0039

Mr.翟的博客 2万+

我的世界进阶模组开发教程——制作机械动力附属模组

摘要: Create是Minecraft的机械动力模组,其代码结构分为多个关键模块: 数据生成系统:通过CreateRecipeProvider基类实现配方自动化生成,支持多步骤序列化装配配方(SequencedAssemblyRecipeGen),采用建造者模式链式调用; 注册管理:CreateRegistrate扩展了Registrate库,统一管理方块、流体、实体等注册,集成标签页分类和工具提示定制; 伤害系统:DamageTypeTagGen为机械伤害(如钻头、风扇火焰)定义原版兼容的标签; 客户端

qq_24992377的博客 2083

WPF 打印 FlowDocument

WPF的打印功能,主要使用PrintDialog和FlowDocument。可以打印表格和指定文本内容

weixin_43152819的博客 1767

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WPF使用FlowDocument实现图文混排

WPF使用FlowDocument实现图文混排 原文:WPF使用FlowDocument实现图文混排代码: <RichTextBox CaretBrush="#fff" Background="Transparent" BorderThickness...

weixin_30432007的博客 1256

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

WPF使用FlowDocument加载文本并修改文本样式

软件在展示软件协议或者免责声明的时候,一般使用RichTextBox控件。RichTextBox 控件可以显示纯文本、Unicode 纯文本或 RTF 格式文件。有时候目标计算机上没有安装office或者为避免版权问题,可使用读取txt文件的方式替代引用word插件来加载文件。 这里使用高级文档功能FlowDocument来承载文本文件的内容和设置内容格式。 1、首先在生成目录下新建Discl...

dnazhd的博客 5615

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

回头来学习wpf的FlowDocument

学习了一段时间的electron,其实是一个神奇的开发方式,让人神往。但其打印和ocx或是activeX方面还是让我不大放心去使用。毕竟当前首要任务还是window的应用开发。 于是重新学习wpf的FlowDocument,竟然发现以下好东西。这回要好好学习了:) https://www.wpf-tutorial.com/zh/55/rich-text%E6%8E%A7%E4%BB%B6/wp...

weixin_30906185的博客 346

WPF 将 docx 的 Word 文件转换为 FlowDocument 显示

本文告诉大家如何将 docx 的 Word 文档在 WPF 中显示内容 本文源代码请看 ArtMalykhin/wpf-embedded-docx 在 Office 文档解析 文档格式和协议 咱可以了解到 Word 文档只是一个压缩文件里面的文件使用 xml 表示 因此需要做的是将 xml 转 FlowDocument 在 WPF 界面显示,大概做到的效果就是丢失很多样式和特效,然后文本形式...

lindexi 1482

自学WPF--第八课FlowDocument

FlowDocument类,用高级文档功能(如分页和列)承载流内容和设置流内格式。 需要添加引用,PresentationFramework(在 PresentationFramework.dll 中),不然就报错误~ 示例代码如下:           xmln

merryken的专栏 1247

WPF FlowDocument中的Block级元素

WPF Block级元素 Block 属性 BorderBrush BorderThickness 设置边框 BreakColumnBefore 获取或设置一个值,该值指示当元素参与使用了分栏的内容呈现时,是否自动在此元素之前插入一个分栏符。 BreakPageBefore 获取或设置一个值,该值指示是否自动在此元素之前插入一个分页符。 ClearFloaters 获取或设置某个 Floater 元素所包含的任何 Block 元素的重新定位方向。 FlowDirection 获取或设置 Block 元素中内

qq_42068856的博客 1404
上一篇: Twitter 概念与使用方法介绍
下一篇: WPF中使用流文档灵活地显示内容
wmjcom
博客等级 码龄24年 71粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值