3

J'ai une application Silverlight 3 contenant six contrôles utilisateur personnalisés. Je voudrais charger le schéma de couleurs pour ces contrôles à partir d'une ressource externe.Définition d'un modèle de couleurs pour une application Silverlight à partir d'une ressource externe

Le code et le code XAML contenant un schéma de couleurs par défaut seront générés dans le fichier XAP. Ensuite, un paramètre sur l'étiquette d'objet contiendra une URL à partir de laquelle des couleurs alternatives peuvent être chargées dynamiquement. Par ailleurs, la fonctionnalité du thème de l'application Silverlight 3 pourrait être utilisée si c'est possible mais est vraiment exagérée. Seules les couleurs doivent être changées.

Est-ce possible et comment recommanderiez-vous de le faire?

Répondre

0

Voici comment je le ferais.

Dans App.xaml Je définirais le dictionnaire application des ressources comme celui-ci: -

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

Maintenant, je placerais l'ColorTable.xaml en dehors de la XAP dans le même dossier que le XAP est située. Cela ne répond pas à tous vos critères, car un ColorTable externe est toujours requis. Il est possible de faire un peu de flexion pour atteindre la totalité des besoins, mais ce sera plutôt désordonné en comparaison.

0

Je prendrais un coup d'œil à la technique Corinna Barber utilise dans ces deux articles:
http://blogs.msdn.com/corrinab/archive/2009/11/24/9927729.aspx
http://blogs.msdn.com/corrinab/archive/2009/12/02/9931283.aspx

En fait ce qu'elle fait est, au démarrage de l'application, elle crée un tas de brosses (à la fois solide et gradients) dans une classe d'aide à la liaison (elle s'appelle SysColors). Ensuite, elle se lie simplement à ces pinceaux, comme ceci: Background="{Binding CalendarGradient, Source={StaticResource SysColors}}"

Le principal inconvénient de son approche est que vous devez écrire un peu de code lors de la création de pinceaux de dégradé. Et tous les différents arrêts de gradient devraient être stockés indépendamment dans votre base de données (ou XML ou autre). Je pense maintenant que vous pourriez probablement stocker vos pinceaux comme xaml et juste utiliser XamlReader.Load pour charger l'ensemble de l'objet pinceau à la fois. Cela ressemble à un meilleur plan pour moi, mais je n'ai pas essayé cela, je pense juste à voix haute.

Dans votre situation, au démarrage de l'application, vous pouvez facilement charger votre schéma par défaut OU récupérer vos valeurs de couleur à partir d'un service WCF ou n'importe où. Vous pouvez même implémenter INotiyPropertyChanged pour tous les pinceaux, et ainsi pouvoir les échanger lors de l'exécution. Mais je suppose que cela pourrait vous donner de mauvaises performances.

Questions connexes