【问题标题】:Setting the colour scheme for a Silverlight app from an external resource从外部资源设置 Silverlight 应用程序的配色方案
【发布时间】:2010-02-17 02:46:29
【问题描述】:

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

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

顺便说一句,如果可能的话,可以使用 Silverlight 3 应用程序主题功能,但这确实是大材小用。只需要更改颜色。

这可能吗?您建议如何做?

【问题讨论】:

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


    【解决方案1】:

    我会这样做。

    在 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。可以稍微调整一下以达到全部要求,但相比之下会很混乱。

    【讨论】:

      【解决方案2】:

      我会看看 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,从而能够在运行时交换它们。但我想这可能会给你带来糟糕的表现。

      【讨论】:

        猜你喜欢
        • 2012-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多