3

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

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

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

这是可能的,你会如何推荐这样做?

回答

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。为了达到完整的要求,可以稍微折弯一下,但相比之下它会相当混乱。

0

我想看看该技术科琳娜理发用这两篇文章:
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,并且可以在运行时交换它们。但我想这可能会给你带来不好的表现。