Quiero reutilizar algún fragmento XAML como imagen en alguna aplicación/biblioteca de WPF.Imagen vectorial como fragmento XAML reutilizable
El fondo del problema es el siguiente:
Es fácil de reutilizar una imagen de mapa de bits en una aplicación de WPF. La imagen se puede agregar como un recurso, puedo usar <Image Source="packURI"/>
en muchos lugares en XAML para que la imagen sea la misma.
Pero me gustaría tener la posibilidad de hacer lo mismo para una imagen vectorial. La imagen en sí misma se puede representar como Path
, pero no puedo reutilizar el mismo Path
como recurso, porque simplemente usarlo en varios lugares diferentes (y posiblemente desde varios subprocesos de IU) está prohibido (el elemento UI puede tener solo un padre lógico).
Por otra parte, la pregunta se vuelve más complicada si me gustaría construir la "imagen" de varios Path
s, use un Canvas
para ello. O algún código XAML arbitrario.
He intentado utilizar un Style
para la Path
, por lo que la imagen se representa de tal manera:
<Path Style={StaticResource VectorImage1}/>
Ésta parece ser una forma reutilizable, pero me preocupan dos problemas:
- Si la implementación de una imagen vectorial se cambia de
Path
a (por ejemplo)Canvas
, tendré que reemplazarla no solo en el estilo, sino en todas partes del código fuente que lo usa. - La definición de una ruta utilizando un estilo parece ser demasiado detallada.
- No veo forma de generalizar este enfoque para usar
Canvas
o código XAML arbitrario. - La sintaxis parece ser bastante antinatural.
Hay otra manera de tener un fragmento XAML reutilizable, a través de la definición de un UserControl
, pero la definición de un control de usuario separada cada vector por parece ser una exageración.
¿Existe una manera mejor, agradable y correcta de definir un fragmento XAML reutilizable?
Intenté usar su sugerencia, pero en el tiempo de ejecución recibí una excepción: "Atributo compartido en el espacio de nombres" http: //schemas.microsoft.com/winfx/2006/xaml 'solo se puede usar en diccionarios de recursos compilados. " Moví 'MyVectorImage' a un diccionario de recursos XAML separado, pero recibo el mismo mensaje de error cuando incluyo ese diccionario en los MergedDictionaries de la ventana. – Vlad
@ Vlad @ I actualicé mi ejemplo. Si probamos el ejemplo con el StackPanel, olvidé mover el atributo x: Shared al StackPanel. –
Veo, mi mal, debería haber intentado entender leer exactamente lo que dice el mensaje. Con x: compartido solo en el nivel superior, funciona. – Vlad