Pregunta

Tengo una aplicación de Silverlight 3 que contiene seis controles de usuario personalizado. Quisiera cargar el esquema de color para estos controles de un recurso externo .

El código y XAML que contiene una combinación de colores por defecto se construirían en el XAP. A continuación, un parámetro en la etiqueta de objeto contendría un URL desde donde colores alternos pueden ser cargados dinámicamente.

Por cierto, la función tema de aplicación de Silverlight 3 podrían utilizarse si eso es posible, pero es realmente una exageración. Sólo los colores tienen que ser cambiado.

¿Es esto posible y cómo me recomiendan para hacerlo?

¿Fue útil?

Solución

Esta es la manera que lo haría.

En App.xaml Yo definiría el diccionario de recursos de aplicación como esta: -

<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="ColorTable.xaml" />
    </ReourceDictionary>
    <!-- rest of your application resource entries here -->
  </ResourceDictionary>
</Application.Resources>

Ahora me coloque el ColorTable.xaml fuera del XAP en la misma carpeta que está situada la XAP. Esto no satisface todos los criterios desde siempre se requiere una tabla de colores externa. Es posible flexionar esto de alguna manera para alcanzar el requisito completo, pero que va a ser bastante complicado en comparación.

Otros consejos

Me gustaría echar un vistazo a la técnica de Corinna peluquero utiliza en estos dos artículos:
http://blogs.msdn.com/corrinab/archive/ 2009/11/24 / 9927729.aspx
http://blogs.msdn.com/corrinab/archive/ 2009/12/02 / 9931283.aspx

Básicamente lo que hace es, al inicio de la aplicación, se crea un grupo de cepillos (tanto sólidos como gradientes) en una clase de ayuda vinculante (de ella se llama SysColors). A continuación, ella simplemente se une a estos cepillos, así: Background="{Binding CalendarGradient, Source={StaticResource SysColors}}"

La principal desventaja de su enfoque es que usted tiene que escribir un poco de código al crear pinceles de degradado. Y todas las diferentes paradas de gradiente tendrían que ser almacenados de forma independiente en su base de datos (o XML, etc.). Estoy pensando ahora que probablemente podría almacenar sus cepillos como XAML y sólo tiene que utilizar XamlReader.Load para cargar todo el objeto cepillo a la vez. Eso suena como un plan mejor para mí, pero no he probado esto, estoy pensando en voz alta.

En su situación, al inicio de la aplicación, usted puede fácilmente cargar su esquema por defecto o recoger a sus valores de color de un servicio WCF o donde sea. Incluso se podría implementar INotiyPropertyChanged para todos los cepillos, y por lo tanto será capaz de cambiar en tiempo de ejecución. Pero supongo que podría dar malos resultados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top