4

在 WPF 中,有没有一种方法可以修改从Dash-Dot序列中 APART 绘制任何路径的方式?假设我想为我正在绘制的任何路径或绘图路径本身上的小三角形、波浪等绘制一条三重线。我已经尝试过画笔,但它不会遵循Path. 请帮忙

谢谢

4

2 回答 2

3

WPF 的Geometry类具有轻松完成此任务所需的所有原语,但您需要在代码中完成。当我需要做自定义线时,我通常Drawing基于构建 a Geometry,但在您的情况下,您可以简单地构建一个Geometry具有平行三行的 a 并对其进行描边。

  1. PathGeometry.CreateFromGeometry()获取PathGeometry输入路径开始
  2. 使用GetWidenedPathGeometry(), 传入所需的间距,以获得边缘对应于边线的新几何图形
  3. (可选)如果需要,删除加宽几何图形末端的段
  4. 使用 a 将边线几何图形与原始几何图形相结合CombinedGeometry
  5. 描边组合几何以获得三重线

第 3 步的更多解释:加宽的几何图形在原始线的末端有线段。这会导致在线条的末端画一条线,这在许多情况下实际上看起来很美观。如果没有它,您的情况看起来会更好,请通过迭代边线几何并删除所有穿过原始路径端点的线段来删除它。

如果你不删除结尾,上面的代码大约需要 8 行代码,如果你这样做,则需要 15 行代码。

使这更方便的一个技巧是创建一个附加属性,该属性有效地强制它附加到Data的控件的属性。Path有了这样的附加属性,您只需要编写:

<Path TripleStroke.Enable="true" Data="..." />

如果您知道如何实现附加属性并在其中注册处理程序,那么这就是小菜一碟。如果没有,请计划在实施附加属性方法之前花几个小时学习如何编写附加属性以模拟值强制。

更新

我上面描述的基本技术也可以扩展为允许沿路径应用任意模式。例如,请参阅表达式设计工具中的自定义画笔。但是,WPF 中没有内置任何东西可以为您执行此操作,因此您需要自己创建它,我可以根据经验告诉您,这需要大量工作。以下是基本步骤:

首先创建一个方法,该方法采用Geometry现有的Drawing,以及端盖等的一些参数,并创建一个新的方法Drawing,该方法Drawing沿Geometry. 然后很容易绘制描边路径:创建一个Drawing来描述自定义描边,然后使用DrawingVisual包含 aBinding的 a 以及调用您的转换方法的转换器显示描边。

要实际实现转换方法:

  1. 将源绘图转换为一组GeometryDrawing对象(我也支持ImageDrawing,但这更复杂,因为您需要使用 3D 系统来拉伸图像)。这是通过在DrawingGroup对象中递归、随时跟踪变换以及使用适当的变换构造 GeometryDrawings 来完成的。
  2. 删除原始图纸“端盖”区域中的几何部分并将它们放在一边。
  3. 沿路径迭代,重复复制GeometryDrawing对象,并将适当的坐标变换应用于几何体中的所有坐标。
  4. 使用相同的程序处理几何的“端盖”部分。

另请注意,在第 1 步中,任何GlyphRunDrawings处理都是使用FormattedText.BuildGeometry以创建等效的GeometryDrawing.

于 2010-01-19T05:42:56.940 回答
0

在 WPF 中不支持执行此操作的方法。解决方案将涉及复合 Path 对象或花哨的代码隐藏体操。您是否专门寻找三线路径实施?

于 2010-01-19T03:07:05.953 回答