ResourceDictionary en un ensamble separado

Tengo archivos de diccionario de recursos (MenuTemplate.xaml, ButtonTemplate.xaml, etc.) que quiero usar en múltiples aplicaciones por separado. Podría agregarlos a los ensamblados de las aplicaciones, pero es mejor si compilo estos recursos en un solo ensamblaje y hago que mis aplicaciones lo hagan referencia, ¿no?

Después de construir el conjunto de recursos, ¿cómo puedo hacer referencia a él en la aplicación.xaml de mis aplicaciones? Actualmente utilizo ResourceDictionary.MergedDictionaries para fusionar los archivos de diccionario individuales. Si los tengo en un ensamblado, ¿cómo puedo hacer referencia a ellos en xaml?

Consulte la syntax de URI del paquete . Quieres algo como esto:

 

Un ejemplo, solo para hacer de esto una respuesta de 15 segundos –

Supongamos que tiene “styles.xaml” en una biblioteca de WPF llamada “common” y desea usarlo desde su proyecto de aplicación principal:

  1. Agregar una referencia del proyecto principal al proyecto “común”
  2. Su app.xaml debe contener:

        

Aclamaciones

Estoy trabajando con .NET 4.5 y no pude hacerlo funcionar … Estaba usando la Biblioteca de control personalizado de WPF. Esto funcionó para mí al final …

  

fuente: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/11a42336-8d87-4656-91a3-275413d3cc19

La DLL de solo recursos es una opción para ti. Pero no se requiere necesariamente a menos que desee modificar los recursos sin recomstackr las aplicaciones. Tener solo un archivo ResourceDictionary común también es una opción. Depende de la frecuencia con la que cambie los recursos, etc.

  

MyAssembly : solo nombre de ensamblaje sin extensión

FolderStructureInAssembly : si sus recursos están en un folde, especifique la estructura de carpetas

Cuando esté haciendo esto, es mejor que conozca también siteOfOrigin .

WPF admite dos autoridades: application: /// y siteoforigin: ///. La autoridad de aplicación: /// identifica los archivos de datos de la aplicación que se conocen en tiempo de comstackción, incluidos los archivos de recursos y de contenido. La autoridad de siteoforigin: /// identifica los archivos del sitio de origen. El scope de cada autoridad se muestra en la siguiente figura.

enter image description here

Para UWP:

  

Usando XAML:

Si conoce la otra estructura de assembly y quiere los resources en el código c # , entonces use el siguiente código:

  ResourceDictionary dictionary = new ResourceDictionary(); dictionary.Source = new Uri("pack://application:,,,/WpfControlLibrary1;Component/RD1.xaml", UriKind.Absolute); foreach (var item in dictionary.Values) { //operations } 

Salida: si queremos usar ResourceDictionary RD1.xaml del Proyecto WpfControlLibrary1 en el proyecto StackOverflowApp .

Estructura de proyectos :

Estructura de proyectos

Diccionario de recursos: Diccionario de recursos

Código de salida:

Salida

PD: todos los archivos ResourceDictionary deben tener Build Action como ‘ Resource ‘ o ‘ Page ‘.

Usando C #:

Si alguien quiere la solución en código c # puro , entonces vea mi solución.