【问题标题】:WPF, convert Path.DataProperty to Segment objectsWPF,将 Path.DataProperty 转换为 Segment 对象
【发布时间】:2011-01-27 00:30:27
【问题描述】:

我想知道是否有工具可以将“M 0 0 l 10 10”之类的路径数据转换为其等效的线/曲线段代码。

目前我正在使用:

string pathXaml = "<Path xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" Data=\"M 0 0 l 10 10\"/>";
Path path = (Path)System.Windows.Markup.XamlReader.Load(pathXaml);

在我看来,调用 XamlParser 比显式创建线段要慢得多。但是手动转换很多路径非常繁琐。

【问题讨论】:

    标签: wpf path geometry line segment


    【解决方案1】:

    没有任何内置功能可以从几何迷你语言生成 C# 或 VB 代码,但您可以按如下方式创建:

    • 发出 C# 或 VB 代码以新建 PathGeometry。
    • 在您的路径字符串上调用PathFigureCollection.Parse。这将返回一个 PathFigureCollection 实例。
    • 遍历 PathFigureCollection。对于每个图:
      • 编写 C# 或 VB 代码以新建 PathFigure 对象并将其添加到 PathGeometry.Figures 集合中。
      • 遍历图窗的 Segments 集合。对于每个段,分析其类型并发出与类型相关的代码,以新建适当类型的 PathSegment、设置其属性并将其添加到当前 PathFigure。

    这是否比手动转换路径更乏味是只有您可以决定的事情...这可能取决于您需要处理多少不同类型的段(即出现多少不同类型的段在您的路径字符串中),因为您必须为 LineSegments、ArcSegments 等编写单独的代码。

    编辑:感谢 cmets 中的 Anvaka 通过提请我注意 PathFigureCollection.Parse 来简化原始答案。

    【讨论】:

    • 嗨 itowlson,看起来问题的作者使用了 XamlReader,这种操作确实很慢。相反,您可以建议他使用 Geometry.Parse() 方法。这比 XamlReader 快。顺便说一句,在您的场景中,您也可以省略转换器,并使用 PathFigureCollection.Parse() :)...我仍然认为您的答案是正确的。
    • Anvaka:小子,我脸红了。我什至没有意识到这些方法是公开的——我认为获得它们的唯一方法是通过转换器。我会更新 - 非常感谢! (关于 XamlReader 与字符串解析,看起来他在我写作时编辑了这个问题——在原始版本中,他直接从代码中的字符串设置 Path 属性。)
    • 感谢所有答案,是的,我确实编辑了问题,我的程序中的代码略有不同,但想法是一样的。我将实施建议的优化。
    【解决方案2】:

    此程序将进行转换: http://stringtopathgeometry.codeplex.com/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多