将模板应用于控件和子控件



我一直在摆弄WPF MDI,它为MDI子对象设置了控件模板。所以当你添加一个MdiChild对象并将其Content设置为UserControl时,它看起来很好,但如果你从mdicchild继承,那么它就不起作用了。

模板代码看起来像这样:

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

我希望这个模板不仅适用于mdicchild,而且适用于从它派生的任何东西。我该怎么做呢?我能想到的唯一方法是创建一个基于mdicchild样式的针对每个派生类的样式,但这不是很理想。

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

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

这样,所有的setter、触发器等都将被继承,而不必为每个派生样式重新定义它们。此外,如果你想在派生版本中有一些不同的行为,它可以让你重写基本样式的setter。

最新更新