WPF线条、路径等自定义图形样式
在WPF中,是否有一种方法可以修改任何路径与点划线序列分开的方式?假设我要为我正在绘制的任何路径或绘制路径本身上的小三角形、波浪等绘制一条三线。我已尝试使用笔刷,但它不会遵循WPF线条、路径等自定义图形样式,wpf,drawing,graphics2d,Wpf,Drawing,Graphics2d,在WPF中,是否有一种方法可以修改任何路径与点划线序列分开的方式?假设我要为我正在绘制的任何路径或绘制路径本身上的小三角形、波浪等绘制一条三线。我已尝试使用笔刷,但它不会遵循路径。请帮忙 thx在WPF中不支持执行此操作的方法。解决方案将涉及组合路径对象或体操背后的奇特代码。您是否在具体寻找三线路径实现?WPF的几何体类具有轻松实现这一点所需的所有原语,但您需要在代码中完成。当我需要做自定义线条时,我通常会基于几何体构建一个图形,但在您的情况下,您可以简单地构建一个具有三条平行线条的几何体,并对
路径
。请帮忙
thx在WPF中不支持执行此操作的方法。解决方案将涉及组合路径对象或体操背后的奇特代码。您是否在具体寻找三线路径实现?WPF的
几何体类具有轻松实现这一点所需的所有原语,但您需要在代码中完成。当我需要做自定义线条时,我通常会基于几何体
构建一个图形
,但在您的情况下,您可以简单地构建一个具有三条平行线条的几何体
,并对其进行笔划
从PathGeometry.CreateFromGeometry()
开始获取输入路径的PathGeometry
使用getWideedPathGeometry()
,传入所需的间距,以获取其边与边线对应的新几何体
(可选)如果需要,删除加宽几何图形末端的线段
使用CombinedGeometry
对组合几何体进行笔划以获得三重线
关于步骤3的更多说明:加宽的几何图形在原始直线的末端有线段。这会导致在线条的末端画一条线,在许多情况下,这实际上看起来很美观。如果没有它,情况会更好,请通过迭代边线几何图形并删除通过原始路径端点的所有线段来删除它
如果不删除端点,上面的代码大约需要8行,如果删除端点,则需要15行
一个方便的技巧是创建一个附加属性,该属性有效地强制它所附加到的路径
控件的数据
属性。有了这样一个附加属性,您只需编写:
<Path TripleStroke.Enable="true" Data="..." />
如果您知道如何实现附加属性并在其中注册处理程序,这是小菜一碟。如果没有,在实现附加属性方法之前,计划花几个小时学习如何编写附加属性以模拟值强制
更新
我上面描述的基本技术也可以扩展为允许沿路径应用任意模式。有关示例,请参见表达式设计工具中的自定义笔刷。然而,WPF中并没有内置任何东西可以为您实现这一点,所以您需要自己创建它,根据经验,我可以告诉您这是一项艰巨的工作。以下是基本步骤:
首先创建一个方法,该方法采用一个几何图形
一个现有的图形
,以及一些端盖参数等,并创建一个新的图形
,该图形沿着几何图形
给出的路径重复给定的图形
。然后很容易绘制笔划路径:创建一个图形
来描述自定义笔划,然后使用DrawingVisual
显示笔划,该图形包含一个绑定
,并带有一个调用转换方法的转换器
要实际实现转换方法,请执行以下操作:
将源图形转换为一组GeometryDrawing
对象(我也支持ImageDrawing
,但这更复杂,因为需要使用3D系统拉伸图像)。这是通过递归DrawingGroup
对象来完成的,在执行过程中跟踪变换,并使用适当的变换构造GeometryDrawings
删除原始图形“端盖”区域中的部分几何图形,并将其放在一边
沿路径迭代,重复地复制几何体绘制
对象,并对几何体中的所有坐标应用适当的坐标变换
使用相同的程序处理几何图形的“端盖”部分
还要注意,在步骤1中,任何GlyphrunDrawing
都是使用FormattedText.BuildGeometry
来处理的。要创建等效的GeometryDrawing
,我现在没有足够的时间为您研究一个正确的答案,但看看这篇文章:,它可能对您非常有用,我相信其中包含了一个平行线路径的实现。您好,谢谢您的评论,但我已经阅读了上面的内容,它复制了现有的路径,使用不同笔刷的单个路径都不能使用,然后将较长的线绘制为长度为1的较小连续线,或者使用自定义边贴图绘制较长的线。使用附加属性强制几何体相对容易。详细信息请参见我的答案。哇,这太酷了。我从来没有想过这样做:)。谢谢。。我需要像adobe brush stroke这样的东西,在那里你可以沿路径虚拟地应用图案。。。我现在做的是低水平的,结果还可以。我在回答中添加了更多信息,描述了我是如何在WPF中实现任意自定义笔划的,就像在Adobe中一样。我希望有帮助。