将模板应用于控件和子项

时间:2014-08-16 16:49:47

标签: c# wpf controltemplate mdi

我一直在修补WPF MDI,它为MDI子对象设置控件模板。因此,当您添加MdiChild对象并将其Content设置为UserControl时,它看起来不错,但如果您从MdiChild继承,则它无法正常工作。

模板代码如下所示:

<Style TargetType="{x:Type local:MdiChild}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:MdiChild}">
<!-- ... -->

我希望这个模板不仅可以应用于MdiChild,还可以应用于任何源自它的东西。我怎么能这样做?我能想到的唯一方法是创建一个针对每个基于MdiChild样式的派生类的样式,但这不是很理想。

1 个答案:

答案 0 :(得分:1)

您必须为每个派生类型声明样式,但使用WPF,您可以使用 BasedOn 从基础样式继承。

<Style TargetType="{x:Type local:DerivedMdiChild}"
       BasedOn="{StaticResource {x:Type local:MdiChild}}">
   ......
</Style>

这样,所有setter,触发器等都将被继承,并且您不必为每个派生样式重新定义它们。此外,如果您想在派生版本中使用某些不同的行为,它可以覆盖基本样式的setter。