本组中的示例展示了如何使用 GrapeCity.Documents.Layout.Composition 命名空间中的类
使用自定义 z 顺序和裁剪创建复杂且灵活的基于约束的布局。
- Surface (GrapeCity.Documents.Layout.Composition.Surface)
表示要在 GrapeCity.Documents.Drawing.GcGraphics 上绘制的视图集合
(如GcPdfGraphics、GcSvgGraphics等)。
Surface 包含执行(计算)布局的 LayoutHost。
Surface 添加了绘制图层和视觉的功能。
- 图层 (GrapeCity.Documents.Layout.Composition.Layer)
表示具有视觉效果、空间、可选剪辑和嵌套层的绘图层。 A Layer也有
类似于 Visual 的 Draw 委托(见下文)。
例如,它可用于填充所包含的视觉效果之间的区域。
-
View(GrapeCity.Documents.Layout.Composition.View,源自Layer)
表示具有关联的 LayoutView 对象和转换的 Layer。
View 使用原点位于左上角的直角坐标系和变换矩阵,
默认情况下是单位矩阵,但可以更改。
视图可以包含视觉、空间和嵌套层。
-
空间 (GrapeCity.Documents.Layout.Composition.Space)
表示图层或视图上的空间以及关联的布局矩形。
虽然空间占据布局中的某些区域,但它没有任何视觉表示,也不参与 z 排序。
-
Visual(GrapeCity.Documents.Layout.Composition.Visual,源自Space)
向 Space 添加视觉表示和 z 排序。表示图层或视图上的图形、文本或图像。
Visual(或 Space)的位置和大小由与其关联的 LayoutRect 确定。
请注意,视觉效果不会形成类的层次结构来绘制不同的内容。相反,视觉对象具有 Draw 委托
用于绘制视觉效果。当该委托被调用时(由包含层),目标图形的变换
调整矩阵,使 (0, 0) 位于视觉对象 LayoutRect 的左上角。 Visual.AsRectf() 方法
返回位于 (0, 0) 的矩形,其大小与视觉对象的 LayoutRect 的大小相同。另外,
Visual.Width 和 Visual.Height 属性会相应调整。
以下“后端”布局类与上面列出的组合“前端”类一起使用:
-
LayoutHost (GrapeCity.Documents.Layout.LayoutHost)
表示 LayoutView 对象的坐标系的宿主和原点。对于每个包含的 LayoutView 对象
LayoutHost 根据提供的约束计算所有 LayoutRect 和 AnchorPoint 坐标。
-
LayoutView (GrapeCity.Documents.Layout.LayoutView)
表示托管 LayoutRect、Contour 和 AnchorPoint 对象的变换表面。 LayoutView 有关联的
变换矩阵(默认为单位矩阵)。 LayoutView 定义了具有固定宽度的视图矩形
从约束中引用的高度。
-
LayoutRect (GrapeCity.Documents.Layout.LayoutRect)
表示带有约束的矩形。它可以相对于所有者 LayoutView 旋转 90 度的倍数。
布局引擎计算 LayoutHost 中所有 LayoutRect 对象的位置和大小。为了使这成为可能
我们需要定义明确确定每个矩形的位置和大小的约束。
-
Constraint(GrapeCity.Documents.Layout.Constraint 和派生类)
约束定义位置、角度或大小如何依赖于其他矩形的参数的规则。每个人
参数是单独配置的,可能取决于同一 LayoutView 中的矩形或 AnchorPoint 或
来自另一个 LayoutView 的轮廓。可以为同一目标参数定义多个约束。
-
AnchorPoint (GrapeCity.Documents.Layout.AnchorPoint)
表示用作 LayoutRect 约束的锚点或用作 Contour 对象的一部分的点。锚点的
X 和 Y 坐标以绝对单位或相对于所有者 LayoutView 或 LayoutRect 的宽度/高度百分比设置。
-
轮廓 (GrapeCity.Documents.Layout.Contour)
表示 LayoutView 上的闭合图形。轮廓由属于同一 LayoutView 的 AnchorPoint 组成。轮廓
使用 View.LayoutView.CreateContour() 创建。轮廓可以具有相对于包含轮廓的锚点
视图或其视觉效果或空间。可以相对于曲面上任何视图(或任何
LayoutHost 中的 LayoutView)。这可以用 e. G。在椭圆内绘制文本。
创建布局的典型步骤:
- 创建一个包含布局的 Surface。
- 使用 Surface 创建一个或多个视图。每个视图都有
大小和变换矩阵。
- 向视图添加视觉效果或空间:
- 使用视图创建一个或多个视觉对象。
一个 Visual 通常有一个关联的 LayoutRect。
约束必须明确确定矩形的大小和位置,
否则会出现错误。如果 Visual 没有 LayoutRect,
它用于在视图坐标系中的锚点上进行绘制。
-
或者,如果您需要向视图添加约束定义的空格,
使用视图添加空间对象。
Space 基本上是没有 Draw 方法的 Visual。
请注意,Space 不是容器,它的唯一目的是添加间距。
- 指定每个 Visual 和 Space 的 LayoutRect 的约束。
约束是相对于同一视图中的其他视觉对象,或相对于视图本身。
唯一的例外是可以相对于 AnchorPoint 指定约束
在另一个视图中,或相对于另一个视图中的轮廓。
GrapeCity.Documents.Layout.Composition 示例: