Нет, действительно, вы совершенно не правы.
Стили устанавливают свойства для элементов управления. ControlTemplate - это свойство , которое используется большинством элементов управления и определяет способ их визуализации.
Чтобы уточнить, вы можете использовать стиль для группировки настроек для набора свойств, чтобы вы могли использовать его повторно для стандартизации ваших элементов управления. Стили могут быть явно заданы для элементов управления или применены ко всем типам.
Шаблоны элементов управления могут быть установлены по стилю или заданы явно для элемента управления, чтобы изменить способ его отображения. Все элементы управления имеют шаблоны по умолчанию (и стили в этом отношении), которые встроены в сборки .net wpf. Это очень поучительно, когда я вижу это и понимаю, как разработчики wpf реализовали обычные версии всех элементов управления. Если у вас установлена смесь Expression, посмотрите ее папку «SystemThemes».
UPDATE:
Чтобы понять, как Styles и ControlTemplates могут «добавлять элементы управления». Так или иначе, ControlTemplate - единственный способ определить элементы управления, из которых состоит элемент управления . Но некоторые элементы управления .net по умолчанию позволяют использовать элементы управления вместо текста.
Например:
<GroupBox>
<GroupBox.Header>
<CheckBox/>
</GroupBox.Header>
</GroupBox>
Это «добавляет» флажок в групповое поле без изменения ControlTemplate
, но это потому, что значение по умолчанию ControlTemplate
для GroupBox
допускает что угодно в качестве заголовка . Это делается с помощью специальных элементов управления, таких как ContentPresenter
.
Однако, иногда ControlTemplate по умолчанию для элемента управления не позволяет вам изменить что-либо, что вы хотите изменить через свойства. Затем вы должны изменить шаблон ControlTemplate.
Независимо от того, устанавливаете ли вы свойства элемента управления (Content, Header, ControlTemplate, IsEnabled и т. Д.) Напрямую или через стиль, стили не имеют значения.
Надеюсь, это ответит на ваш вопрос более четко.