Векторное изображение как многоразовый fragment XAML

Я хочу повторно использовать некоторый fragment XAML как изображение в некоторых приложениях / библиотеках WPF.

Основой проблемы является следующее:

Легко повторно использовать bitmap в приложении WPF. Изображение может быть добавлено как ресурс, я могу использовать во многих местах XAML, чтобы изображение было таким же.

Но я хотел бы иметь возможность сделать то же самое для векторного изображения. Само изображение может быть представлено как « Path , но я не могу повторно использовать один и тот же Path как ресурс, потому что просто использовать его в нескольких разных местах (и, возможно, из нескольких streamов пользовательского интерфейса) запрещено (элемент пользовательского интерфейса может иметь только один логический родительский элемент).

Более того, вопрос усложняется, если я хочу создать «образ» из нескольких Path , используйте для него Canvas . Или какой-то произвольный код XAML.

Я попытался использовать Style для Path , поэтому изображение представлено таким образом:

  

Это кажется многоразовым, но меня беспокоят две проблемы:

  1. Если реализация векторного изображения изменяется с Path на a (например) Canvas , мне нужно будет заменить его не только в стиле, но и везде в исходном коде, который его использует.
  2. Определение пути с использованием стиля кажется слишком многословным.
  3. Я не вижу возможности обобщить этот подход для использования Canvas или произвольного кода XAML.
  4. Синтаксис кажется совершенно неестественным.

Существует другой способ иметь многоразовый fragment XAML, определяя UserControl , но определение отдельного пользовательского элемента управления для каждого векторного изображения кажется излишним.

Есть ли лучший, хороший, правильный способ определения многоразового fragmentа XAML?

Вы можете добавить атрибут x: Shared в Resource Path и использовать его как StaticResource. Это будет работать, если «MyVectorImage» изменится на что-то еще

Обновить
Вероятно, лучше использовать ContentControl или аналогично иметь возможность добавлять свойства, такие как Margin и т. Д.

        

Пример. Вы заменяете «MyVectorImage» на StackPanel, содержащий два пути.

       

После некоторых исследований есть еще один вариант: использование DrawingImage качестве Source для изображения. BitmapSource источником изображения является BitmapSource , однако он может быть также «векторной графикой».

Вот пример :

                          

создает такое приятное векторное изображение:

векторное изображение из источника

Еще одним вариантом может быть использование DrawingBrush , как в этом вопросе SO: как хранить и извлекать несколько фигур в XAML / WPF? ,

Вы можете сохранить путь в словаре ресурсов и установить x: Shared to false:

  

Это позволит WPF создавать новый экземпляр каждый раз, когда он запрашивается. http://msdn.microsoft.com/en-us/library/aa970778.aspx