.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"/>
Estoy trabajando con .NET 4.5 y no pude hacer que esto funcionara ... Estaba usando WPF Custom Control Library. Esto me funcionó al final ...
<ResourceDictionary Source="/MyAssembly;component/mytheme.xaml" />
fuente: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/11a42336-8d87-4656-91a3-275413d3cc19
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:
- Agregar una referencia del proyecto principal al proyecto "común"
- 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 :
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.