Question

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 .

Le code et XAML contenant un système de couleurs par défaut seront construites dans le XAP. Ensuite, un paramètre sur l'étiquette d'objet contiendra une URL d'où couleurs alternées peuvent être chargés dynamiquement.

Par ailleurs, la fonction de thème d'application Silverlight 3 pourrait être utilisé si cela est possible, mais est vraiment exagéré. Seules les couleurs doivent être changées.

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

Était-ce utile?

La solution

Voici comment je le ferais.

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

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

Maintenant, je mettrais la ColorTable.xaml en dehors du XAP dans le même dossier que le XAP est située. Cela ne répond pas tout à fait tous vos critères depuis un ColorTable externe est toujours nécessaire. Il est possible de fléchir ce peu pour atteindre l'exigence complète, mais ce sera tout à fait désordonnée en comparaison.

Autres conseils

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 solides et des gradients) dans une classe d'aide de liaison (la sienne est appelée SysColors). Puis elle se lie simplement à ces brosses, comme ceci: Background="{Binding CalendarGradient, Source={StaticResource SysColors}}"

Le principal inconvénient à son approche est que vous devez écrire un peu de code lors de la création de brosses à gradient. Et tous les différents arrêts de gradient devraient être stockées indépendamment dans votre base de données (ou xml ou autre). Je pense maintenant que vous pouvez probablement stocker vos pinceaux comme XAML et il suffit d'utiliser XamlReader.Load pour charger l'objet brosse entière à la fois. Cela ressemble à un meilleur me plan, mais je n'ai pas essayé, je suis en train de penser à voix haute.

Dans votre situation, au démarrage de l'application, vous pouvez facilement charger votre système par défaut ou récupérer vos valeurs de couleur à partir d'un service WCF ou ailleurs. Vous pouvez même mettre en œuvre INotiyPropertyChanged pour tous les pinceaux, et être ainsi en mesure de les échanger lors de l'exécution. Mais je suppose que cela pourrait vous donner de mauvaises performances.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top