2009-12-18 22 views
6

Tengo una biblioteca de clases Silverlight (no una aplicación de nivel superior) con varios controles de usuario que se comparten con diferentes aplicaciones Silverlight. He revisado y sacado varios estilos y pinceles para los controles y los puse en un archivo XAML separado como un diccionario de recursos que incluyo en cada control como un diccionario de recursos fusionados. En este momento, esto funciona muy bien en mis aplicaciones de nivel superior, siempre que conserve ese diccionario de recursos como una acción de compilación de "Recurso" y lo haga referencia de esa manera desde los controles.Packaging ResourceDictionary para Silverlight Class Library

Lo que realmente me gustaría hacer es tener este archivo de diccionario de recursos XAML como una acción de compilación de "Contenido" que se copia en el XAP de nivel superior, para que el XAML pueda intercambiarse en el archivo XAP sin necesidad de reconstruir el proyecto Cada vez que intento configurar esto, el archivo XAML se copiará en la bandeja de salida para el proyecto de la biblioteca de la clase, pero nunca se copiará a mi directorio de salida del proyecto de aplicaciones silverlight de nivel superior ni al archivo XAP final.

¿Cuál es la mejor manera de lograr esto? El diccionario de recursos XAML es esencialmente una dependencia de la biblioteca de clases, y la biblioteca de clases (de los controles de usuario) es una dependencia de la aplicación Silverlight de nivel superior.

Respuesta

1

Añadir la ControlResources.xaml (el ResourceDictionary que desee en su XAP) para el nivel superior XAP proyecto como enlace a través de Proyecto-> Agregar elemento existente-> Agregar como enlace (un elemento desplegable en el botón Agregar en el cuadro de diálogo), y configurarlo como contenido, también.

+0

Este parece ser el mejor enfoque posible, es un poco molesto tener una referencia a una biblioteca de clases de Silverlight y un enlace a uno de sus archivos de salida en la aplicación Silverlight. Supongo que es la única forma de ingresar al XAP sin algunos hacks de reempaquetado XAP posteriores a la construcción. –

+0

Después de probar algunas cosas más, este enfoque funciona bien en el tiempo de ejecución, pero no parece ser "Blendable". Al abrir la aplicación silverlight de nivel superior en Expression Blend, recibo un montón de errores ... parece que Blend no puede seguir los enlaces del proyecto a ResourceDictionary para la biblioteca de clases de controles. ¿Alguna idea sobre cómo hacer que Blend juegue bien? Esta solución no se reducirá si nunca puedo abrir el proyecto correctamente en Blend. –

0
+0

Diccionarios de recursos fusionados son los que uso, guarde los estilos y pinceles en un archivo XAML separado, el problema es que el diccionario es parte de mi Biblioteca de clases Silverlight compartida, no una aplicación de Silverlight. Cuando establezco la acción de compilación en Contenido y Copiar siempre, nunca se copia en el archivo XAP de mi aplicación. Solo trato de encontrar la mejor forma de empaquetar y referenciar un recurso de una biblioteca de clases dependientes en el XAP final. –

+0

eche un vistazo a los archivos de recursos fusionados de proyecto cruzado en http://thoughtjelly.blogspot.com/2009/10/cross-project-mergeddictionaries-in.html –

+1

El OP especificó que el objetivo era poder intercambiar el recurso compartido Archivo XAML fuera del archivo XAP sin reconstruir. La estrategia de ensamblaje de recursos compartidos a la que se hace referencia en la publicación de Mark no parece que logre esto. Para intercambiar este XAML sin reconstruir, se requiere que sea un archivo de contenido en el XAP (no compilado en un ensamblado). La única manera que conozco de lograr eso es con un elemento de compilación de "Contenido" en el proyecto de aplicación de Silverlight que se está construyendo, por lo que el elemento del archivo de proyecto vinculado es el camino a seguir aquí. –