Шаблоны элементов управления WPF

Всем привет, сегодня поговорим о шаблонах элементов управления wpf. Я думаю вы встречали приложения в которых при выборе из меню можно менять внешний вид элементов, они могли стать другим цветом, поменять формы. При чем при изменении, однотипные элементы приобретали одни черты визуального оформления. Так давайте разберем каким образом это делается в wpf и вы сможете, создав один раз шаблон, адаптировать его в других своих приложениях, может да же захотите воспользоваться чужим шаблоном и подключить его в своем проекте.

Логическое дерево

Логическое дерево — набор элементов управления, которые были размещены на окне. Все функциональные возможности, вроде наследования свойств, маршрутизации событий и наследование стилей работает через логическое дерево.

Визуальное дерево

Визуальное дерево – расширенная версия логического дерева. В нем элементы разбиваются на более мелкие фрагменты. Например, кнопка разбивается на три составные – ButtonChrome, ontentPresenter,
TextBlock.

Визуальное дерево:

  • Позволяет заменить один из элементов с помощью стилей
  • Разрабатывать шаблоны элементов управления.
  • Каждый элемент управления имеет встроенное средство, определяющее способ его визуализации (как группу более фундаментальных элементов). Это средство называется шаблоном элемента управления (control template) и определяется с помощью блока XAML-разметки.
  • Каждый элемент управления WPF спроектирован как не имеющий внешнего вида, в том смысле, что его внешний вид может быть полностью переопределен. Неизменным остается лишь поведение элемента управления, которое жестко привязано к классу элемента (хотя часто оно может быть тонко настроено с помощью свойств).

Создание шаблона (в ресурсах):

Пример того как использовать в разметке:

 

Так же мы можем добавить триггеры, и обработать их, вот пример того как это можно сделать:

В начале статьи я описал случай когда можно, с помощью выбора в меню изменить стиль окна. Сильно пример я не буду усложнять, оставим одну кнопку на форму, при нажатии на которую она будет изменять свой стиль через шаблон.

И так добавим на пустую форму кнопку.

Xaml у меня вышел вот такой:

Создадим в проекте 2 элемента, Словарь ресурсов WPF, я им дал имена DictionaryTemplate.xaml и DictionaryTemplate2.xaml, располагаются они у меня в папке Resources

Внутри файлов в xaml разметки я добавил шаблон меняющий стиль кнопок.

DictionaryTemplate.xaml

DictionaryTemplate2.xaml

Добавим в разметку в файле App.xaml, где нам надо указать какой шаблон будем подключать.

App.xaml

Наш шаблон начал работать. Однако при нажатии кнопки ничего не происходит, так добавим немного сишарпного кода, перейдем в фаил MainWindow

MainWindow.cs

Если бы мы использовали не App.xaml для вызова нашего шаблона, а MainWindows.xaml то нужно было бы подкорректировать путь следующим образом.

 

Вот такой результат должен получится, при запуске проекта:

Обновлено: 09.03.2021 — 19:44

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.