在 WPF 中,有没有一种方法可以修改从Dash-Dot
序列中 APART 绘制任何路径的方式?假设我想为我正在绘制的任何路径或绘图路径本身上的小三角形、波浪等绘制一条三重线。我已经尝试过画笔,但它不会遵循Path
. 请帮忙
谢谢
在 WPF 中,有没有一种方法可以修改从Dash-Dot
序列中 APART 绘制任何路径的方式?假设我想为我正在绘制的任何路径或绘图路径本身上的小三角形、波浪等绘制一条三重线。我已经尝试过画笔,但它不会遵循Path
. 请帮忙
谢谢
WPF 的Geometry
类具有轻松完成此任务所需的所有原语,但您需要在代码中完成。当我需要做自定义线时,我通常Drawing
基于构建 a Geometry
,但在您的情况下,您可以简单地构建一个Geometry
具有平行三行的 a 并对其进行描边。
PathGeometry.CreateFromGeometry()
获取PathGeometry
输入路径开始GetWidenedPathGeometry()
, 传入所需的间距,以获得边缘对应于边线的新几何图形CombinedGeometry
第 3 步的更多解释:加宽的几何图形在原始线的末端有线段。这会导致在线条的末端画一条线,这在许多情况下实际上看起来很美观。如果没有它,您的情况看起来会更好,请通过迭代边线几何并删除所有穿过原始路径端点的线段来删除它。
如果你不删除结尾,上面的代码大约需要 8 行代码,如果你这样做,则需要 15 行代码。
使这更方便的一个技巧是创建一个附加属性,该属性有效地强制它附加到Data
的控件的属性。Path
有了这样的附加属性,您只需要编写:
<Path TripleStroke.Enable="true" Data="..." />
如果您知道如何实现附加属性并在其中注册处理程序,那么这就是小菜一碟。如果没有,请计划在实施附加属性方法之前花几个小时学习如何编写附加属性以模拟值强制。
更新
我上面描述的基本技术也可以扩展为允许沿路径应用任意模式。例如,请参阅表达式设计工具中的自定义画笔。但是,WPF 中没有内置任何东西可以为您执行此操作,因此您需要自己创建它,我可以根据经验告诉您,这需要大量工作。以下是基本步骤:
首先创建一个方法,该方法采用Geometry
现有的Drawing
,以及端盖等的一些参数,并创建一个新的方法Drawing
,该方法Drawing
沿Geometry
. 然后很容易绘制描边路径:创建一个Drawing
来描述自定义描边,然后使用DrawingVisual
包含 aBinding
的 a 以及调用您的转换方法的转换器显示描边。
要实际实现转换方法:
GeometryDrawing
对象(我也支持ImageDrawing
,但这更复杂,因为您需要使用 3D 系统来拉伸图像)。这是通过在DrawingGroup
对象中递归、随时跟踪变换以及使用适当的变换构造 GeometryDrawings 来完成的。GeometryDrawing
对象,并将适当的坐标变换应用于几何体中的所有坐标。另请注意,在第 1 步中,任何GlyphRunDrawings
处理都是使用FormattedText.BuildGeometry
以创建等效的GeometryDrawing
.
在 WPF 中不支持执行此操作的方法。解决方案将涉及复合 Path 对象或花哨的代码隐藏体操。您是否专门寻找三线路径实施?