resource from code .net wpf xaml controltemplate resourcedictionary

.net - xamarin get static resource from code



ResourceDictionary en una asamblea separada (6)

DLL de solo recursos es una opción para usted. Pero no es necesario necesariamente a menos que desee modificar los recursos sin volver a compilar las aplicaciones. Tener solo un archivo de ResourceDictionary común también es una opción. Depende de la frecuencia con la que cambies los recursos y etc.

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

MyAssembly - Sólo el nombre del ensamblado sin extensión

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

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

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

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

Una vez creado el conjunto de recursos, ¿cómo puedo hacer referencia a él en el App.xaml de mis aplicaciones? Actualmente utilizo ResourceDictionary.MergedDictionaries para combinar los archivos de diccionarios individuales. Si los tengo en un ensamblaje, ¿cómo puedo hacer referencia a ellos en xaml?


Echa un vistazo a la sintaxis del paquete URI . Quieres algo como esto:

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



Para UWP:

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


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

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

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

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

Aclamaciones


Utilizando XAML:

Si conoce la otra estructura de assembly y desea los resources en el código c # , 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 App .

Estructura de Proyectos :

Diccionario de recursos:

Salida de código:

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

Utilizando C #:

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