Настройка цветовой схемы для приложения Silverlight из внешнего ресурса - PullRequest
3 голосов
/ 17 февраля 2010

У меня есть приложение Silverlight 3, содержащее шесть пользовательских элементов управления. Я бы хотел загрузить цветовую схему для этих элементов управления из внешнего ресурса .

Код и XAML, содержащие цветовую схему по умолчанию, будут встроены в XAP. Тогда параметр в теге объекта будет содержать URL-адрес, откуда можно динамически загружать альтернативные цвета.

Кстати, тема приложения Silverlight 3 может быть использована, если это возможно, но это действительно излишне. Необходимо изменить только цвета.

Возможно ли это и как бы вы порекомендовали это сделать?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2010

Я бы взглянул на технику, которую Коринна Барбер использует в этих двух статьях:
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 для всех кистей и, таким образом, иметь возможность менять их во время выполнения. Но я думаю, это может дать вам плохую производительность.

0 голосов
/ 17 февраля 2010

Вот как бы я это сделал.

В 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. Можно несколько согнуть это для достижения полного требования, но это будет довольно грязно по сравнению.

...