2010-01-09 48 views
14

我在一个WPF项目上工作,我已经为某些特殊操作对CheckBox控制进行了重写。这是正常工作。如何继承控制模板

我的问题是,从主题(来自codeplex的shinyred.xaml)应用的ControlTemplate未应用于我的覆盖控件。有没有办法继承我的新控件使用的CheckBoxControlTemplate

我能找到的所有样品都集中在继承CheckBox的样式,但没有任何关于ControlTemplate的样式。

回答

17

不,如你所说可以通过使用BasedOn属性来“继承”一种风格,但不可能直接“继承”模板。这是可以理解的,但模板继承的语义是什么?派生模板如何能够以某种方式添加或更改基本模板中的元素?

使用样式完全有可能,因为您可以简单地添加Setters,Triggers等。唯一可以想象的模板继承可能是将Triggers添加到基本模板。但是,在这种情况下,您必须熟悉基本模板中的元素名称,并且基本模板中的元素名称更改可能会破坏派生的元素名称。更不用提可读性问题了,在这里你引用了衍生模板中的一个名称,该模板在其他地方完全定义。

迟来的加法说了这么多,就可以解决你的特定问题(尽管我现在怀疑它仍然是你的问题,甚至是一个问题)。您只需使用设置器为您的控件定义一种样式,即Template属性:

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