Как унаследовать шаблон управления - PullRequest
17 голосов
/ 09 января 2010

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

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

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

1 Ответ

19 голосов
/ 09 января 2010

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

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

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

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