9

En WPF fue posible organizar el XAML para múltiples controles de usuario manteniendo el marcado en archivos XAML separados en la carpeta themes y luego usando MergedDictionaries para importarlos a generic.xaml:Uso de MergedDictionaries en generic.xaml en Silverlight 3

<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="MyFirstControl.xaml" /> 
     <ResourceDictionary Source="MySecondControl.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

Con la disponibilidad de Silverlight 3 beta presentando el soporte de diccionario combinado, parecía que podría ser posible hacer lo mismo con los controles de usuario de Silverlight. Pero a pesar de probar todas las combinaciones de acción de compilación en los archivos de diccionario fusionados y la sintaxis correspondiente para la referencia de origen en generic.xaml, parece que no puedo hacer que funcione.

¿Alguien más ha intentado? ¿Alguien sabe si es posible y, si es así, qué estoy haciendo mal?


OK - así que después de numerosos proyectos de prueba, obteniendo muestras de trabajo en WPF y moviendo el # código XAML y C a lo largo de Silverlight 3 y todavía no lo hice una desinstalación completa y volver a instalar de TODOS los Silverlight 2 bits Y TODOS los bits beta de Silverlight 3 y finalmente pusieron las cosas en marcha.

Solo puedo suponer que de alguna manera terminé con una instalación defectuosa de la versión beta - No lo sé, pero parecía que todavía estaba corriendo en el tiempo de ejecución de Silverlight 2 a pesar de tener aparentemente instalado el tiempo de ejecución de la versión 3.

Gracias Jared para echar un vistazo a las cosas y consultar al equipo SL3 ... y gracias a Amy Dullard y Shawn Wildermuth para la producción de las instrucciones y archivos por lotes para ejecutar Silverlight 2 & 3 en la misma máquina.

Respuesta

12

he intentado lo siguiente en un control de usuario y funcionó:

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="ResourcesA.xaml" /> 
      <ResourceDictionary Source="ResourcesB.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 
<StackPanel> 
    <Rectangle Width="100" Height="100" Fill="{StaticResource ResAColor}" /> 
    <Rectangle Width="100" Height="100" Fill="{StaticResource ResBColor}" /> 
</StackPanel> 

Pero se menciona específicamente generic.xaml. ¿Qué tipo de problema tienes?

- EDITAR

Sobre la base de las observaciones adicionales, hablaba con el equipo SL3 y tiene la siguiente respuesta:

funciona para mí, usando generic.xaml compilados como de recursos, y el uso de la sintaxis de recurso completo Hay un error en no ser capaz de utilizar URIs relativas a la Fuente de generic.xaml (31783), pero la forma no familiar deben funcionar bien

<ResourceDictionary Source='/SilverlightClassLibrary1;component/CustomControl.xaml'/> 

en generic.xaml, y modificar la acumulación acciones para genérico.xaml y CustomControl.xaml para ser recurso. Avíseme si todavía hay problemas, si obtiene una repro, puedo echarle un vistazo.

¿Eso ayuda?

+0

Tenía la impresión de que MergedDictionaries no era compatible con Silverlight. ¿Es esto nuevo en SL3? – Rich

+0

Sí, nuevo en SL3. –

+0

Sí, no tengo problemas para usar recursos fusionados en general, pero tratar de usar archivos xaml separados para los estilos/plantillas de diferentes controles de usuario y reunirlos como diccionarios fusionados en un archivo generic.xaml es lo que me está dando problemas. –

1

Si MySecondControl.xaml usa un recurso de MyFirstControl.xaml, el orden en que los agrega a ResourceDictionary de generic.xaml no tendrá importancia. Tendrá que incluir de manera redundante MyFirstControl.xaml en MySecondControl.xaml. MySecondControl.xaml debe contener:

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source='/MyControls;component/Themes/MyFirstControl.xaml'/> 
</ResourceDictionary.MergedDictionaries> 
<!-- ... Contents of MySecondControl.xaml --> 
0

sólo trabaje a través de este tema. Los ResourceDictionaries son compatibles con MergedDictionaries, pero para los controles de plantilla personalizados que usan Generic.xaml, Generic.xaml no es compatible con MergedDictionaries. Entonces hay dos opciones: (1) apila todas sus plantillas en Generic.xaml; o (2) usted crea YourOwnDictionary.xaml, fusionó todos sus diccionarios por separado en YourOwnDictionary.xaml, y hace referencia a YourOwnDictionary.xaml desde controles de usuario y páginas. Esto parece ser una característica/error de versiones anteriores de Silverlight que no admiten diccionarios fusionados.

Cuestiones relacionadas