从外部资源设置Silverlight应用程序的颜色方案

时间:2010-02-17 02:46:30

标签: silverlight silverlight-3.0 themes color-scheme dynamic-loading

我有一个包含六个自定义用户控件的Silverlight 3应用程序。我想从外部资源加载这些控件的配色方案

包含默认颜色方案的代码和XAML将在XAP中构建。然后,对象标签上的参数将包含一个URL,可以动态加载替代颜色。

顺便说一句,如果可能的话,可以使用Silverlight 3应用程序主题功能,但实际上是过度杀伤。只需要更改颜色。

这可能,你会建议怎么做?

2 个答案:

答案 0 :(得分:0)

我会这样做。

在App.xaml中,我将像这样定义应用程序资源字典: -

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

现在我将ColorTable.xaml放在XAP之外的XAP所在的文件夹中。由于始终需要外部ColorTable,因此这并不完全符合您的所有条件。可以稍微弯曲一下以达到完全要求,但相比之下它会非常混乱。

答案 1 :(得分:0)

我将看看Corinna Barber在这两篇文章中使用的技术:
http://blogs.msdn.com/corrinab/archive/2009/11/24/9927729.aspx
http://blogs.msdn.com/corrinab/archive/2009/12/02/9931283.aspx

基本上她所做的是,在应用程序启动时,她在绑定帮助程序类中创建了一堆画笔(包括实体和渐变)(她称为SysColors)。然后她只是绑定到这些画笔,如下所示:Background="{Binding CalendarGradient, Source={StaticResource SysColors}}"

她的方法的主要缺点是在创建渐变画笔时必须编写相当多的代码。并且所有不同的梯度停止都必须独立存储在您的数据库(或xml或其他)中。我现在想你可以将你的画笔存储为xaml,只需使用XamlReader.Load一次加载整个画笔对象。这听起来对我来说是一个更好的计划,但我没有尝试过,我只是在大声思考。

在您的情况下,在应用程序启动时,您可以轻松加载默认方案或从WCF服务或任何地方获取颜色值。您甚至可以为所有画笔实现INotiyPropertyChanged,因此可以在运行时交换它们。但我想这可能会给你糟糕的表现。