Мой стиль подключения WPF стилей.

Со временем при работе с WPF набираеться небольшая такая коллекция стилей и темплейтов.
Лично у меня уже штук 30 всяких накруток для контролов, TreeView'ы с растягивающимися полями, TextBox'ы с исчезающими подписями, Button'ы и ComboBox'ы.
По началу все это дело писалось в каждом проекте заново, на третий раз копипастить уже стало влом.
Сначала создал папочку с названием Styles, и подключал её на лево и на право.
Потом когда появилась необходимость таскать за собой контролы, создал проект WpfControls, закинул туда стили, темплейты и контролы, короче всю UI билеберду. Получилось очень удобно.

Например если существует Темплейт для ComboBox меняющий его вид, ну и чуть принцип действия, ставим его x:Key равным "{x:Type ComboBox}", тогда он будет автоматически назначаться всем ComboBox'ам при подключении.
А если например есть еще один такой же темлпейт ComboBox'a но уже без кнопочки выбора, то есть менее часто используемый, то просто указываем его x:Key равный чему нибуть типа «ComboBoxWithoutButton». И тогда уже при подключении в нужном ComboBox'е указываем Template равным "{DynamicResource ComboBoxWithoutButton}".

Так как Стили и Темплейты являються ресурсами, подключать их надо по разному, в зависимости где они лежат, в соседней папке или в соседнем проекте.

Соседняя папка:


<Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Styles\MediumExpander.xaml"></ResourceDictionary>
                <ResourceDictionary Source="Styles\ProgressBar.xaml"></ResourceDictionary>
                <ResourceDictionary Source="Styles\Slider.xaml"></ResourceDictionary>
                <ResourceDictionary Source="Styles\Checkbox.xaml"></ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
</Window.Resources>


Соседний проект(не забудте добавить на него ссылку):

<Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/WpfControls;component/Styles\Slider.xaml" />
                <ResourceDictionary Source="pack://application:,,,/WpfControls;component/Styles\Styles.xaml" />
                <ResourceDictionary Source="pack://application:,,,/WpfControls;component/Styles\Button.xaml" />
                <ResourceDictionary Source="pack://application:,,,/WpfControls;component/Styles\Tab.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
</Window.Resources>


Вот пожалуй и все, надеюсь пригодится.
  • +1
  • 17 декабря 2009, 16:46
  • Exscess

Комментарии (3)

RSS свернуть / развернуть
+
0
спасибо, здорово!
еще можно использовать Application.Resources вместо Window.Resources, соответственно положив все это в файл App.xaml, для того чтобы стили были доступны глобально
avatar

NetCoder

  • 17 декабря 2009, 18:01
+
0
Идея отличная, но можно для совсем новичков прикрепить ссылку на проект+WpfControls? можно не со всем WpfControls, но чтобы были ComboBox (x:Type ComboBox и ComboBoxWithoutButton) и их использование в проекте.
avatar

gorniv

  • 1 декабря 2011, 12:01
+
0
ок я пороюсь у себя в хламе, может найду этот проект.
avatar

Exscess

  • 1 декабря 2011, 14:37

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.