2013-11-12 2 views
0

У нас есть библиотека WPF, которая содержит стили, используемые во многих наших продуктах. Он организован следующим образом. Каждый отступом уровень сливается в библиотеку вышеОрганизация ResourceDictionary в библиотеке стилей WPF

WpfResources.xaml 
    Color.xaml 
    ButtonStyle.xaml 
    Color.xaml 
    OtherStyle.xaml 
    Color.xaml 
    SliderStyle.xaml 
    Color.xaml 

Проблема такого подхода заключается в том, что, как вы можете видеть, Color.xaml добавляется к каждому стилю управления, я добавить. Это может быть, и я не уверен, что вы получите удар производительности. Все цвета кистей, полей и т. Д. В Color.xaml заморожены.

Если я удалю Color.xaml из контрольного ресурса ResourceDictionaries, дизайнер визуальной студии начнет жаловаться на отсутствие StaticResources для цветов и других вещей, объявленных в Color.xaml. Я мог бы заменить их DynamicResources, но это не разумная производительность.

Любые идеи по лучшей организации стилей?

ответ

0

В нашем приложении у нас есть ResourceDictionary только для цветов. Итак, каждый цвет в нашем приложении загружается в эти файлы. Затем у нас есть наши стили и шаблоны XAML файлы для всех элементов управления, а не отдельные, как вы его положили.

Одна вещь, которую я узнал, если вы что-то повторяете, это может быть лучше. Вот наш файл App.xaml только для примера. Имейте в виду, что с одним Color.xaml вы можете сделать много тем/скинов!
Когда кто-то спрашивает о новом стиле, это займет всего 10 минут, чтобы сделать это! Вот оно:

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="pack://application:,,,/Cmp.Wpf;component/CmpEstilos/Colors.xaml" /> <!-- Our Colors are here! --> 
    <ResourceDictionary Source="pack://application:,,,/Cmp.Wpf;component/CmpEstilos/Styles.xaml" /> <!-- Our Styles are here! --> 
    <ResourceDictionary Source="pack://application:,,,/Cmp.Wpf;component/CmpTemplates/Templates.xaml" /> <!-- Our Templates are here! --> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

Этот код находится внутри App.xaml - просто чтобы напомнить вам.
Ничего против вашего подхода, но я думаю, что было бы легче поддерживать, если у вас есть один файл, ответственный за каждую «ответственность».

Удачи.

+0

Итак, вы добавляете App.xaml в свою библиотеку, чтобы позволить дизайнеру VS разрешить ваши StaticResources? – Wouter

+0

@Wouter Да. Когда мы хотим изменить тему. Мы вызываем метод для перезагрузки этих файлов с помощью другого 'Color.xaml'. – Tico

+0

Проблема заключается в том, что разработчик VS2013 (и 2012) не решает ResouceDictionary из библиотеки, когда у него есть код позади. – Wouter

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