Pregunta

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

Después de compilar el ensamblado de recursos, ¿cómo puedo hacer referencia a él en el App.xaml de mis aplicaciones? Actualmente uso ResourceDictionary.MergedDictionaries para fusionar los archivos de diccionario individuales. Si los tengo en un ensamblaje, ¿cómo puedo hacer referencia a ellos en xaml?

¿Fue útil?

Solución

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

<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>

Otros consejos

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

Digamos que tiene " styles.xaml " en una biblioteca WPF llamada "común" y quieres usarlo desde tu proyecto de aplicación principal:

  1. Agregue una referencia del proyecto principal a "común" proyecto
  2. Su app.xaml debe contener:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/Common;component/styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Saludos

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 ...

<ResourceDictionary Source="/MyAssembly;component/mytheme.xaml" />

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

DLL de solo recursos es una opción para usted. Pero no se requiere necesariamente a menos que desee modificar recursos sin volver a compilar 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.

<ResourceDictionary Source="pack://application:,,,/
     <MyAssembly>;component/<FolderStructureInAssembly>/<ResourceFile.xaml>"/>

MyAssembly : solo nombre de ensamblado sin extensión

FolderStructureInAssembly : si sus recursos están en una carpeta, especifique la estructura de la carpeta

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

  

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

ingrese la descripción de la imagen aquí

Para UWP:

<ResourceDictionary Source="ms-appx:///##Namespace.External.Assembly##/##FOLDER##/##FILE##.xaml" />

Uso de XAML:

Si conoce la otra estructura de ensamblaje y quiere los recursos en el código c# , utilice 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 StackOverflowApp proyecto.

Estructura de proyectos :

 Estructura de proyectos

Diccionario de recursos: Diccionario de recursos

Salida de código:

 Salida

PS: Todos los archivos ResourceDictionary deben tener Build Action como ' Resource ' o ' Page '.

Uso de C #:

  

Si alguien quiere la solución en c # code , simplemente vea mi esto   solución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top