本组中的示例展示了如何在 GrapeCity.Documents.Drawing.GcGraphics 上绘制表格
(如GcBitmapGraphics、GcSvgGraphics等)与GrapeCity.Documents.Drawing.TableRenderer类。
TableRenderer 可以与 GrapeCity.Documents.Layout.Composition 命名空间中的类一起使用
绘制复杂的布局,包括表格、文本和图形。
- TableRenderer (GrapeCity.Documents.Drawing.TableRenderer)
表示具有合并、旋转、自动调整大小、多层单元格和可自定义单元格样式的绘图表的辅助类。
表格单元格可以包含简单文本、多格式 TextLayout 或所有者绘制的内容。
TableRenderer 类构建在布局引擎之上(请参阅 GrapeCity.Documents.Layout.LayoutHost 和相关类)。
- FrameStyle (GrapeCity.Documents.Drawing.FrameStyle)
表示表格框架或表格单元格的边框和填充样式。其属性指定
线条填充、线条宽度、线条颜色、内容填充和角半径。
- CellStyle(GrapeCity.Documents.Drawing.CellStyle,派生自FrameStyle)
添加表格单元格的 z 顺序、内边框、内容填充和文本布局的设置。有
指定文本格式、旋转、对齐方式和允许的文本宽度的属性。
CustomDraw 委托允许您在表格单元格内绘制自定义内容(例如嵌套表格)。
一种 CellStyle 可以与多个表格单元格关联。
- TableCell (GrapeCity.Documents.Drawing.TableCell)
表示与表格中特定单元格关联的样式和内容(数据)。
TableCell 包含有关单元格的行索引和列索引、合并的行数和列数的信息,
以图形单位表示的单元格的宽度和高度。
绘制表格通常涉及以下步骤:
- 为表格创建一个矩形 (LayoutRect)。有两种可能的方法。
您可以使用 GrapeCity.Documents.Layout.Composition 命名空间中的辅助类,
或直接来自 GrapeCity.Documents.Layout 命名空间的类:
- 如果使用辅助组合类:创建一个 Surface 对象,然后创建一个 View(例如,具有目标页面的大小)。
使用 View 对象创建将托管表的 Visual。 Visual 对象具有关联的 LayoutRect 对象。
- 或者,如果直接使用布局类,则创建一个 LayoutHost 对象,然后创建一个 LayoutView
与目标页面的宽度和高度。使用 LayoutView 对象创建 LayoutRect。
- 为表LayoutRect 设置约束。您必须至少修复桌子的一个角。
然后将根据表格内容计算其他角的位置。
您还可以修复表格的两个角(例如,通过为其顶部、左侧和右侧设置约束)或全部四个角。
必须相应地选择传递给 TableRenderer 构造函数的fixedSides 参数的值。
- 创建一个 TableRenderer 对象,将 GcGraphics、LayoutRect 和其他参数传递给构造函数。号码
表行和列的数量以及表填充设置将传递给构造函数,并且以后无法更改。
- 如有必要,对某些列宽和行高应用额外的约束。默认最小列宽
最小行高可以传递给 TableRenderer 构造函数。
- 根据需要,使用文本格式、填充设置和其他调整创建 CellStyle 对象。通常创建起来很方便
基本单元格样式,然后基于它创建其他更具体的样式。
- 使用 TableRenderer.AddCell() 方法添加具有准备好的单元格样式和表格数据的表格单元格。一些细胞
可以跨越多个列和行。使用背景或前景样式的单元格可能会重叠多个常规单元格,
例如,显示突出显示的行。
- 如果需要,请调用 TableRenderer.AddMissingCells() 方法添加空单元格以填充表格中的任何空白。
否则,不会在空单元格周围绘制网格线。
指定所有约束并添加所有单元格后,如果您直接使用 LayoutHost 对象,
只需调用 TableRenderer.Render() 方法即可。它在传递给构造函数的 GcGraphics 对象上绘制表格。
或者,如果您创建了 Surface 和 Visual 对象,则必须执行一些额外的步骤:
- 调用TableRenderer.ApplyCellConstraints()方法来计算表格布局。
- 将 Draw 委托附加到 Visual 对象。在其代码中,您需要将 GcGraphics.Transform 分配给
Visual.Layer.Surface.BaseTransform,然后执行TableRenderer.Render()方法。
- 现在您可以使用一个或多个表格和其他视觉效果来绘制 Surface。调用 Surface.Render() 方法,
将目标 GcGraphics 对象传递给它。
GrapeCity.Documents.Drawing.TableRenderer 示例: