2009-06-10 15 views
5

Estoy empezando a desarrollar una aplicación de escritorio usando WPF (.net 3.5 sp1, con VS solamente, sin combinar aún).XAML: Cómo definir plantillas de datos y estilos para usar en varios proyectos

Estoy en el punto donde tengo algunos componentes genéricos reutilizables en varias bibliotecas.

¿Dónde puedo definir mis plantillas de datos de Styles & para que sean reutilizables en varios proyectos, de modo que pueda tener un aspecto y una presentación coherentes?

He mirado en ResourceDictionaries, pero estoy seguro de que

  1. Son lo que necesito
  2. Si son lo que necesito, cómo puedo 'importación' de ellos en otro proyecto y referencia sus contenidos en Xaml.

Gracias,

Respuesta

10

ResourceDictionary es el camino a seguir, puede copiar un archivo xaml que contenga el diccionario de recursos entre proyectos o compilarlos en una DLL a la que hará referencia desde sus proyectos.

Para hacer referencia a diccionarios en el mismo proyecto, agregue algo como esto a su App.xaml (en este caso guardo mis recursos en la carpeta ControlStyles).

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="ControlStyles/Colors.xaml"/> 
      <ResourceDictionary Source="ControlStyles/Window.xaml"/> 
      <ResourceDictionary Source="ControlStyles/Button.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

Si los compila en un archivo DLL diferentes que puede utilizar esta sintaxis (si el archivo DLL de estilos se llama StyleAssembly, la palabra "componente" es en realidad parte de la sintaxis y no un nombre de directorio):

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="pack://application:,,,/StyleAssembly;component/ControlStyles/Colors.xaml"/> 
      <ResourceDictionary Source="pack://application:,,,/StyleAssembly;component/ControlStyles/Window.xaml"/> 
      <ResourceDictionary Source="pack://application:,,,/StyleAssembly;component/ControlStyles/Button.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
+0

Eres solo una estrella, gracias :) –

0

Usted quiere diccionarios de recursos fusionados, tal como se describe here.

3

@Nir es correcta, la única cosa que me gusta hacer, así es reemplazar

<ResourceDictionary Source="pack://application:,,,/StyleAssembly;component/ControlStyles/Colors.xaml"/> 

con esta abreviatura

<ResourceDictionary Source="/StyleAssembly;component/ControlStyles/Colors.xaml"/> 

Simplemente me parece más limpio y el tiempo de ejecución incluirá el paquete de prefijos: // aplicación: ,,, cuando intente localizar el recurso.

Cuestiones relacionadas