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