如何在DrawingImage中使用路径?

10

我定义了一些路径,希望将其转换为DrawingImage资源,但我似乎漏掉了什么。

例如:

我想要将下面的内容:

<Path Stroke="DarkGoldenRod" StrokeThickness="3" 
      Data="M 100,200 C 100,25 400,350 400,175 H 280" />

并可以像这样使用:

<DrawingImage x:Key='icon'>
    <DrawingImage.Drawing>
      <DrawingGroup>
        <DrawingGroup.Children>
          <GeometryDrawing ... />
          . . .
        </DrawingGroup.Children>
      </DrawingGroup>
    </DrawingImage.Drawing>
</DrawingImage>
任何建议?-dk

我使用从Inkscape导出的XPS文件中的数据时遇到了相同类型的问题。 - jpierson
很遗憾,有两种方法可以完成这个任务,它们之间存在非常重要的差异... - Roman Starkov
我使用Expression Design导出ResourceDictionary,其中包含DrawingBrushes,并将名称更改为DrawingImages。 - marbel82
2个回答

12

这应该可以工作:

<DrawingImage x:Key='icon'>
  <DrawingImage.Drawing>
    <DrawingGroup>
      <DrawingGroup.Children>
        <GeometryDrawing Geometry="M 100,200 C 100,25 400,350 400,175 H 280">
          <GeometryDrawing.Pen>
            <Pen Thickness="3" Brush="DarkGoldenRod"/>
          </GeometryDrawing.Pen>
        </GeometryDrawing>
      </DrawingGroup.Children>
    </DrawingGroup>
  </DrawingImage.Drawing>
</DrawingImage>

我宁愿不手动将路径转换为几何等效形式。这样做的原因是我有一些使用Blend创建的xaml艺术品,它使用简写的xaml Path来渲染路径。我注意到Expression Design也使用相同的短路径语法,除非你导出,然后它使用与你示例中相同的语法。 - dk.
如果你想把它放在DrawingImage中,我认为在XAML中没有其他的方法...不过你可能可以在代码后台中完成。 - Thomas Levesque
这是我会做的方式。我认为我们在这里缺少一些信息。 - cplotts

6

根据你对Thomas回答的评论,我不太清楚你想做什么。

然而,Expression Design可以以两种不同的WPF方式导出:

  1. 导出为ResourceDictionary,其中艺术品变成DrawingBrush(es),或者
  2. 导出为Canvas,其中艺术品变成Path(s)和Shape(s)。

ResourceDictionary / DrawingBrush方法与您在问题中提供的建议答案非常相似,Thomas也是这样回答的。

我的建议是使用Expression Design设计您的艺术品,然后保留.design文件,以便您随时可以导出到任何格式...特别是在以后的某个时间点。

现在,我知道很多艺术品都是在Adobe Illustrator中完成,然后使用Expression Design进行转换。如果是这种情况,我会保留.ai文件和.design文件,以便您始终可以修改艺术品并重新导出。

当然,这都是为了避免您无法将xaml导入Expression Design(即它不支持往返场景)的问题。

我要提醒的一件事是,有时候不只是从Path.Data属性复制小路径语言到GeometryDrawing.Geometry属性那么简单......因为调整大小的情况可能会发生(这意味着DrawingBrush(es)通常在某个地方设置为填充,然后它们通常填充任何空间)。所以要小心!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接