在自定义WPF控件中重用现有模板

在自定义WPF控件中重用现有模板,wpf,.net-3.5,wpf-controls,Wpf,.net 3.5,Wpf Controls,我正在创建一个从ComboBox继承的自定义WPF控件类。由于我只是在定义行为,现有的组合框模板对于我来说很好,我不想创建一整套模板来支持不同的主题。是否有方法指定我的控件使用现有的ComboBox模板?为控件提供默认样式并设置为ComboBox的默认样式: <Style TargetType="{x:Type local:CustomControl1}" BasedOn="{StaticResource {x:Type ComboBox}}"> </Style&

我正在创建一个从ComboBox继承的自定义WPF控件类。由于我只是在定义行为,现有的组合框模板对于我来说很好,我不想创建一整套模板来支持不同的主题。是否有方法指定我的控件使用现有的ComboBox模板?

为控件提供默认样式并设置为ComboBox的默认样式:

<Style TargetType="{x:Type local:CustomControl1}"
       BasedOn="{StaticResource {x:Type ComboBox}}">
</Style>


这将从组合框默认样式继承模板设置器

你什么都不用做。如果您的控件继承自
组合框
,并且您没有覆盖
DefaultStyleKey
属性,那么它将使用与
组合框
相同的样式(因此使用相同的模板)

,尽管Thomas的答案也适用于这种情况,并且有其自身的优势,改为使用此方法将允许您稍后分别重写自定义控件的默认样式(与ComboBox的默认样式不同),而无需返回并调整控件的代码。起初我尝试了此方法,但向导的最终目的是重写键,我得到了一个不可见的控件。这是一个很好的解决方案,它工作,所以我已经投票给它,但我接受了另一个,因为它给你有选择地覆盖和扩展现有模板的能力,这是一个好的。