Темы WPF

240

Темы WPF представляют собой наборы стилизованных шаблонов элементов управления WPF. Здесь я представляю разработанные мною темы. Ниже представлены ссылки на сами темы:

DarkBlue

Тема DarkBlue

DarkOrange

Тема DarkOrange

Использование тем

В составе исходного проекта в папке Themes находятся 3 словаря ресурсов:

Core.xaml

Содержит видоизмененную структуру всех шаблонов элементов управления

Brushes.xaml

Содержит кисти, цвета, эффекты и константы, используемые в словаре Core.xaml

Icons.xaml

Содержит векторные иконки, написанные на XAML

В качестве примера использования шаблонов давайте предположим, что вам необходимо стилизовать элемент управления Button. Ниже описаны основные шаги:

Особенности использования некоторых шаблонов

Ниже описаны некоторые особенности применения шаблонов.

Стилизация элементов DataGridCheckBoxColumn и DataGridComboBoxColumn

DataGridCheckBoxColumn и DataGridComboBoxColumn – это подэлементы DataGrid, не имеющие свойства Template, поэтому в стандартном шаблоне они не стилизованы. Однако в демо проектах вы можете увидеть, что они имеют аналогичный вид элементам управления CheckBox и ComboBox. Данное поведение достигается за счет непосредственного указания стиля в свойстве ElementStyle, как показано в следующей разметке:

<DataGridCheckBoxColumn …>
   <DataGridCheckBoxColumn.ElementStyle>
      <Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource {x:Type CheckBox}}">
      …
      </Style>
   </DataGridCheckBoxColumn.ElementStyle>
</DataGridCheckBoxColumn>

В приведенном коде ключевым, является использование наследования стиля от стандартного элемента CheckBox, за счет использования атрибута BasedOn. Используйте данный подход в своих приложениях, если хотите стилизовать элементы DataGridCheckBoxColumn и DataGridComboBoxColumn. Так же не забудьте добавить в проект шаблоны для элементов CheckBox и ComboBox.

Использование шаблона элемента управления DatePicker

Элемент управления DatePicker имеет вид простого текстового поля, которое содержит строку с датой в длинном или коротком формате. Справа у него есть кнопочка со стрелкой, при щелчке на которой раскрывается полное представление календаря, идентичное элементу Calendar.

Очевидно, что для стилизации этого выпадающего календаря в проекте помимо шаблона элемента DatePicker должен присутствовать также шаблон для элемента Calendar, а иначе вид календарика будет иметь стандартный стиль. При использовании всех шаблонов, беспокоиться об этом не стоит.

Использование XAML-иконок

XAML-иконоки описаны в файле Icons.xaml в виде ресурсов. Чтобы подключить их к проекту нужно добавить словарь ресурсов с нужными иконками к проекту как говорилось выше.

Чтобы легко найти в словаре ресурсов нужную иконку, просто запустите демо-проект и наведите на нужную иконку указатель мыши, при этом ее название будет видно во всплывающей подсказке. Далее найдите это название в исходном словаре ресурсов с помощью поиска (в VS10 Ctrl + F) и скопируйте данную разметку в свой словарь ресурсов.

Чтобы показать использование иконок в реальном приложении, а заодно продемонстрировать их преимущество по сравнению с обычными png-иконками, давайте рассмотрим следующий пример:

<Window 
        ...
        Title="Test Icons" Height="100" Width="200">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Viewbox>
            <Path Stretch="Fill" Data="{StaticResource weather_symbolStyle0}" Stroke="LimeGreen"/>
        </Viewbox>
        <Viewbox Grid.Column="1">
            <Image Source="picture.png"/>
        </Viewbox>
    </Grid>
</Window>

Обратите внимание, что здесь слева векторная XAML-иконка, а справа обычная иконка в виде рисунка, предварительно добавленного в проект. В исходном виде (т.е. при разрешении 100х100) иконки выглядят вполне нормально. Но теперь попробуйте увеличить размер окна в несколько раз и вы увидите, что иконка в виде рисунка стала гораздо менее отчетливой (известная проблема для растровых изображений), при этом векторная иконка автоматически масштабирует себя и выглядит очень хорошо:

Сравнение векторной и растровой картинок в WPF

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

Помощь по использованию шаблонов

Если у вас возникли какие-то вопросы по применению данных шаблонов или вы нашли ошибки, пишите на форуме в разделе по WPF.

Пройди тесты
Лучший чат для C# программистов