2009-06-03 14 views

Respuesta

28

Sí, por supuesto que es posible, siempre y cuando el proyecto B tiene una referencia de los proyectos A.

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/Project A;component/YourSubFolder/YourResourceFile.xaml" /> 
</ResourceDictionary.MergedDictionaries> 

A continuación, sólo puede utilizar los recursos definidos en YourResourceFile.xaml.

+0

Oh snap. ¡Estoy intentando eso! ¡¡Gracias!! – Pwninstein

+0

No sabía esto - ¡buen truco! –

+0

¿Qué sucede si los proyectos no comparten una referencia? En mi caso, estoy usando PRISM y declarando estilos en el Shell. Me gustaría poder reutilizar algunos de los colores definidos. – R4cOON

10

Descubrí que tenía que hacer referencia al ensamblaje en sí y no usar un nombre de proyecto. Tampoco necesité usar la sintaxis pack// para hacer que esto funcione.

Esta respuesta sobre la cuestión duplicado especifica el formato a utilizar (puedo comprobar que esta sintaxis funciona en .NET 4.0): https://stackoverflow.com/a/10216253/1260563

concreto (ya que siempre se me olvida la parte componente pensando que es una carpeta a alguien está utilizando):

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/<YourAssemblyName>;component/<YourReferencedFileHere.xaml>" /> 
</ResourceDictionary.MergedDictionaries> 

Así que si usted tiene un ensamblaje Abc.Def.dll y un archivo DLL en el que llama Xyz.xaml en el nivel raíz se debería utilizar:

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/Abc.Def;component/Xyz.xaml" /> 
</ResourceDictionary.MergedDictionaries> 

Nota: Resharper 7 señaló que tuve que hacer referencia al ensamblaje en sí.

+0

Gracias por dar ejemplos específicos y señalar la necesidad de la parte componente de la ruta. Esto ayudó más que la media docena de otras soluciones con las que tropecé. –

Cuestiones relacionadas