c# - samples - wpf prism tutorial
Prisma WPF-¿Dónde poner los recursos? (3)
Desarrollé la aplicación con Prism, y uso la técnica muy parecida a la descrita en el manual de Prism. Existe el proyecto YourApplication.Infrastructure, donde normalmente coloca todas sus interfaces compartidas, etc. Así que:
- Acabo de agregar el proyecto YourApplication.Resources
- Crear una carpeta de Temas
- Cree un archivo xaml separado en la carpeta Temas para cada grupo de recursos (como Generic.WPF.xaml para los estilos de controles estándar de WPF, Generic.Brushes.xaml para pinceles, etc.)
Cree el archivo Themes / Generic.xaml (exactamente con este nombre, agregará enormes beneficios en el futuro) con contenido como
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Generic.Brushes.xaml"/> <ResourceDictionary Source="Generic.WPF.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary>
Ahora puede agregar esos recursos en cualquier módulo (tiene un proyecto separado para él, ¿verdad?) Agregando una referencia a YourApplication.Resources a ese proyecto y agregándolo al xaml de su vista:
<UserControl.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/YourApplication.Resources;component/Themes/Generic.xaml"/> </ResourceDictionary.MergedDictionaries> <!-- Put your not shared resource here --> </ResourceDictionary> </UserControl.Resources>
No sé, quizás de esta manera tenga algunos problemas, pero funciona, y funciona bien para mí. Si alguien puede comentar de esta manera (pros / contras), estaré muy contento de escucharlo.
Tengo una aplicación de prisma y varios módulos. Me pregunto dónde es el mejor lugar para ubicar recursos como estilos, pinceles, plantillas de control, plantillas de datos.
¿Debo hacer un solo diccionario de recursos y poner todo allí? ¿Debería cada módulo tener sus propios recursos? O cada vista? Me gustaría seguir el objetivo de Prism de mantener todo modular, pero tampoco veo el punto de volver a declarar los mismos recursos en cada módulo ...
Los recursos de toda la aplicación que normalmente pongo en un ResourceDictionary
, que se agrega a App.xaml
o StartupWindow.xaml
Los recursos para una Vista específica generalmente se ubican con la Vista. Por ejemplo, un UserControl que se está utilizando para un CalendarView contendrá cualquier recurso personalizado para el Calendario, como pinceles, estilos, plantillas, etc. específicos del calendario.
Por lo general, no veo una razón para crear ResourceDictionary
para todo el módulo, pero si alguna vez lo hiciera, tendría un ResourceDictionary
para el Módulo que se puede cargar en los diccionarios combinados de la aplicación en el tiempo de ejecución, o incluirlos en Vistas individuales en el Módulo.
Me gustaría compartir algunos nuevos conocimientos. Estoy usando el enfoque @chopikadze. Y es un enfoque realmente genial. ¡Gracias a ti!
Sin embargo, si no desea escribir cada vez para cada control, estos fragmentos de código:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/YourApplication.Resources;component/Themes/Generic.xaml"/>
</ResourceDictionary.MergedDictionaries>
<!-- Put your not shared resource here -->
</ResourceDictionary>
</UserControl.Resources>
Entonces simplemente puede declarar <ResourceDictionary/>
en App.xaml
de su Bootstrapper
así:
<Application.Resources>
<ResourceDictionary Source="pack://application:,,,/YourApplication.Resources;component/Themes/Generic.xaml"/>
</Application.Resources>