Importe XAML por separado como ResourceDictionary y asigne x: Key

Descargué la biblioteca de imágenes de Visual Studio y veo que los icons incluidos están disponibles en formato vectorial en forma de archivos .XAML. Aquí hay un ejemplo:

Add_16x.xaml

                   

Quiero poner todos los archivos xaml de icons que quiero usar en mi fuente de aplicación en una carpeta llamada “Iconos” y luego poder tener un archivo llamado IconDictionary.xaml en otro lugar que defina un ResourceDictionary contiene un MergedDictionaries y dentro de este MergedDictionaries . Quiero poder incluir los archivos icon.xaml de alguna manera y asignarles una propiedad x:Key para que pueda referirme a ellos en mi aplicación como recursos estáticos.

¿Es posible usar este archivo icon.xaml sin modificar el archivo .xaml?

Me gustaría poder simplemente dejarlos como están, pero desafortunadamente parece que no tengo más remedio que copiar sus contenidos en mi IconDictionary.xaml o editar los archivos .xaml individuales y rodearlos en un ResourceDictionary con una x:Key que podría agregar a mis MergedDictionaries .


ACTUALIZAR

Esto es lo que me gustaría que mi IconDictionary.xaml se vea para mayor claridad:

      

¿Es posible usar este archivo icon.xaml sin modificar el archivo .xaml?

No lo creo Si bien XAML se parece mucho a XML y sigue muchas reglas XML, el comstackdor XAML no parece permitir el marcado DOCTYPE y ENTITY que normalmente se usaría para importar XML de un archivo a otro . Cuando se usa, el primer error reportado dice “DTD está prohibido en este documento XML” . Sin la capacidad de proporcionar una DTD, no puede declarar entidades y, por lo tanto, no podrá importar el XAML independiente.

Si desea utilizar el archivo XAML generado directamente, puede agregar el archivo a su proyecto como un recurso. Los datos del recurso se pueden cargar luego usando XamlReader.Load() en el código subyacente, agregados en el momento adecuado donde lo desee.

Por ejemplo, asumiendo que ha copiado el archivo XAML a una carpeta llamada “Recursos” en su proyecto, y configuró la “Acción de comstackción” para el archivo en “Recurso” , puede escribir un código como este para recuperar el objeto:

 using (Stream stream = App.GetResourceStream( new Uri("pack://application:,,,/Resources/Add_16x.xaml")).Stream) { object o = XamlReader.Load(stream); } 

Obtendrá un objeto Stream que representa los datos del archivo XAML que se ha incrustado en su aplicación y luego cargará el objeto WPF que representa el XAML, utilizando el método XamlReader.Load() .

Personalmente, cuando estoy usando estos archivos, solo copio / DrawingGroup elemento DrawingGroup del archivo XAML, en mi propio archivo XAML de recursos. La envoltura ( Viewbox , Rectangle , y DrawingBrush ) son redundantes de todos modos. Lo que realmente necesito es el objeto DrawingGroup .

Cuando hago esto, también syntax explícita de , y solo DrawingGroup los hijos de DrawingGroup directamente, haciendo que el XAML sea un poco más conciso. P.ej:

        

A continuación, puede utilizar el recurso anterior como desee. Por ejemplo, un enfoque idiomático en WPF sería declarar una DataTemplate configurada para mostrar un Drawing la forma que desee, y luego vincular un recurso de Drawing dado como contenido para un control de contenido. P.ej:

        

Luego en otro lugar:

  

(Asegurarse de que el estilo para el control de contenido, por ejemplo, su Button , sea compatible con su recurso de Drawing , es decir, tamaño correcto, etc.)

¿Qué tal esto?

app.xaml

        

Y úsalo así:

  

O,

        

Y úsalo así: