Как наследовать шаблон управления

Я работаю над проектом WPF, где я переопределил элемент управления CheckBox для некоторых специальных операций. Это работает правильно.

Моя проблема в том, что ControlTemplate, который был применен из темы (shinyred.xaml из codeplex), не применяется к моему чрезмерному управлению. Есть ли способ наследовать CheckBox ControlTemplate для использования моим новым элементом управления?

Все образцы, которые я могу найти, сосредоточены на наследовании стиля для CheckBox, но ничего не о ControlTemplate.

Ответы

Ответ 1

Нет, как вы сказали, можно "наследовать" стиль, используя свойство BasedOn, но невозможно прямо "наследовать" шаблон. Это понятно, однако, какова будет семантика наследования шаблонов? Как бы производный шаблон мог каким-то образом добавлять или изменять элементы в базовом шаблоне?

С стилями это вполне возможно, так как вы можете просто добавить Setters, Triggers и т.д. Единственное, что, возможно, возможно с наследованием шаблонов, - это добавить Triggers к базовому шаблону. Однако в этом случае вам придется иметь интимное знание имен элементов в базовом шаблоне, а изменение имени элемента в базовом шаблоне может сломать ваш производный. Не говоря уже о проблеме с удобочитаемостью, где вы ссылаетесь на имя в своем производном шаблоне, которое полностью определено где-то еще.

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

<Style TargetType="<your type>">
    <Setter Property="Template" Value="{StaticResource <existing template resource name>}"/>
</Style>