2010-06-11 2 views
1

Мне очень нравится WPF из-за его потрясающей поддержки скинов, изменяя ресурсы на лету, но уловка - это стили, которые должны быть сделаны дизайнерами в XAML. Мой клиент нуждается в скин-интерфейсе, где конечные пользователи могут сами создавать скины. Мой вопрос:Можно ли настраивать стили WPF?

В Photoshop вы можете сделать любое изображение и добавить наложение цвета, чтобы изменить все цвета на этот оттенок. Можете ли вы сделать что-то подобное в WPF? Я всего лишь новичок и, глядя на несколько стилей WPF, кажется, что все цветовые значения жестко закодированы.

Вот пример сценария - пользователь выбирает два цвета из наборов цветов, а все элементы управления имеют градиентный фон от Color1 до Color2.

EDIT: Можно ли сохранить цвета в файл XML и снова загрузиться?

ответ

1

Ключа должны понимать, что стиль может содержать DynamicResource или переплет, так что если ваш стиль:

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Background" Value="{DynamicResource UserSelectedBackground}" /> 
    ... 
</Style> 

что вы установите в качестве ресурса «UserSelectedBackground» будет применяться ко всем кнопкам.

В качестве альтернативы вы можете привязать к объекту вида модели:

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Background" Value="{Binding ButtonBackground, Source={x:Static my:SkinModel.Instance}" /> 
    ... 
</Style> 

Теперь, когда ButtonBackground ваших изменений экземпляра SkinModel, все кнопки фон будет автоматически обновлять. (Предполагается, что ваша SkinModel использует DependencyProperties или реализует INotifyPropertyChanged.)

Чтобы позволить пользователю отдельно управлять двумя концами заливки градиента, создайте в свой SkinModel два свойства SolidColorBrush, которые привязаны с двух сторон цветовыми сборщиками. Всякий раз, когда эти свойства меняются, перекомпонуйте свойство ButtonBackground (либо в PropertyChangedCallback свойства DependencyProperty, либо в установщике свойства CLR).

Сохранение состояния в файле тривиально: просто используйте XamlWriter для сериализации SkinModel для XAML, а затем напишите его в файл. Чтобы загрузить его позже, просто используйте XamlReader.Parse.

0

Вы можете сохранить значения цвета в XML/DataBase (sqllite может быть хорошо подходит) и поместить их в класс, к которому будут привязываться элементы управления. Таким образом вы можете использовать colorpicker для пользователя, чтобы изменить эти данные.

Смежные вопросы