Можно ли создавать настраиваемые стили WPF? - PullRequest
1 голос
/ 11 июня 2010

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

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

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

РЕДАКТИРОВАТЬ: Можно ли сохранить цвета в файл XML и загрузить снова?

Ответы [ 2 ]

1 голос
/ 12 июня 2010

Ключ в том, чтобы понять, что стиль может содержать DynamicResource или Binding, поэтому, если ваш стиль:

<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.)

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

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

0 голосов
/ 11 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...