矢量图像作为可重复使用的XAML片段

我想在一些WPF应用程序/库中重用一些XAML片段作为图像。

问题的背景如下:

在WPF应用程序中重用位图图像很容易。 图像可以作为资源添加,我可以在XAML中的许多地方使用 ,因此图像将是相同的。

但是我想有可能对矢量图像做同样的事情。 图像本身可以表示为Path ,但我不能重复使用相同的Path作为资源,因为禁止在几个不同的地方(可能来自多个UI线程)使用它(UI元素只能有一个逻辑父元素)。

而且,如果我想从几个Path构建“图像”,使用Canvas ,问题会变得更加复杂。 或者一些任意的XAML代码。

我尝试使用Style for the Path ,因此图像以这样的方式表示:

  

这似乎是一种可重用的方式,但我关注两个问题:

  1. 如果矢量图像的实现从Path更改为(例如) Canvas ,我不仅需要在样式中替换它,而且还需要在使用它的源代码中的任何位置替换它。
  2. 使用样式的路径的定义似乎过于冗长。
  3. 我认为没有办法概括这种使用Canvas或任意XAML代码的方法。
  4. 语法似乎很不自然。

通过定义UserControl ,还有其他方法可以获得可重用的XAML片段,但是为每个矢量图像定义单独的用户控件似乎是一种过度杀伤力。

是否有更好,更好,正确的方法来定义可重用的XAML片段?

您可以将x:Shared属性添加到Path Resource并将其用作StaticResource。 如果“MyVectorImage”更改为其他内容,则此方法有效

更新
可能更好地使用ContentControl或类似的东西来添加属性,例如保证金等。

        

例。 您将“MyVectorImage”替换为包含两个路径的StackPanel。

       

经过一些研究,还有一个选择:使用DrawingImage作为图像的Source 。 习惯的图像源是BitmapSource ,但它也可以是“矢量图形”。

这是一个例子 :

                          

产生这样一个漂亮的矢量图像:

从上面的源矢量图像

另一种选择可能是使用DrawingBrush ,就像在这个SO问题中: 如何在XAML / WPF中存储和检索多个形状? 。

您可以将路径存储在资源字典中,并将x:Shared设置为false:

  

这将告诉WPF每次请求时都创建一个新实例。 http://msdn.microsoft.com/en-us/library/aa970778.aspx