WPF Line,路径..等自定义绘图样式

时间:2009-10-29 06:32:59

标签: wpf drawing graphics2d

在WPF中,有一种方法可以修改从Dash-Dot序列中绘制APART的路径的方式吗?假设我想为我正在绘制的任何路径或绘制路径本身上的小三角形,波形等绘制三条线。我尝试过刷子,但它不会跟随Path。请帮忙

THX

2 个答案:

答案 0 :(得分:3)

WPF的Geometry类具有您轻松完成此操作所需的所有原语,但您需要在代码中执行此操作。当我需要进行自定义行时,我通常会根据Drawing构建一个Geometry,但在您的情况下,您可以简单地构建一个并行三行的Geometry并对其进行描述。< / p>

  1. PathGeometry.CreateFromGeometry()开始,获取输入路径PathGeometry
  2. 使用GetWidenedPathGeometry(),传入所需的间距,以获得边缘与边线对应的新几何体
  3. (可选)如果需要,删除加宽几何体末尾的线段
  4. 使用CombinedGeometry
  5. 将侧线几何与原始几何相结合
  6. 描绘组合几何体以获得三线
  7. 关于步骤3的更多说明:加宽的几何体在原始线的末尾具有线段。这会导致在线的末端绘制一条线,这在许多情况下实际上看起来很美观。如果没有它你的情况看起来会更好,可以通过迭代侧线几何体并删除通过原始路径端点的所有线段来移除它。

    如果你没有取消结果,上面的代码大约需要8行代码,如果你这样做则需要15行代码。

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

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

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

    <强>更新

    我上面描述的基本技术也可以扩展到允许沿路径应用任意模式。有关示例,请参阅Expression Design工具中的自定义画笔。但是,WPF没有内置任何东西为你做这件事,所以你需要自己创建它,我可以从经验告诉你这是很多工作。以下是基本步骤:

    首先创建一个方法,该方法会将Geometry一个现有的Drawing和一些参数设置为端盖等,并创建一个重复给定Drawing的新Drawing Geometry给出的路径。然后很容易绘制描边路径:创建一个Drawing来描述自定义描边,然后使用包含DrawingVisual Binding的{​​{1}}显示描边,并使用转换器调用转换方法

    要实际实现转换方法:

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

答案 1 :(得分:0)

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