我一直在修补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样式的派生类的样式,但这不是很理想。
答案 0 :(得分:1)
您必须为每个派生类型声明样式,但使用WPF,您可以使用 BasedOn
从基础样式继承。
<Style TargetType="{x:Type local:DerivedMdiChild}"
BasedOn="{StaticResource {x:Type local:MdiChild}}">
......
</Style>
这样,所有setter,触发器等都将被继承,并且您不必为每个派生样式重新定义它们。此外,如果您想在派生版本中使用某些不同的行为,它可以覆盖基本样式的setter。