我知道我是一个变态者,但我很好奇,有没有办法让自定义控件首先寻找它的基类风格,然后它就是自己的。 为什么我要问:我有一些带有自定义项模板的TreeView派生控件。我应用这些模板,然后我有一个基本风格。后来我可能会应用一些调色板。在最后一步我有一个问题。我需要应用2种风格。 PVStructuralTree派生自TreeView,它有一些DependencyProperty DataTemplates,可以插入到代码中的资源中。
PVStructuralTreeView
PVStructuralTreeView的默认样式:
<Style x:Key="DefaultPVStructuralTreeView" TargetType="{x:Type c:PVStructuralTreeView}" BasedOn="{StaticResource DefaultTreeView}">
<Setter Property="EmploeeTemplate"><!-- This get inserted inro Resources in code -->
<Setter.Value>
<DataTemplate DataType="{x:Type s:Emploee}">
...
</DataTemplate>
</Setter.Value>
</Setter>
... Lots of them here
</Style>
<Style TargetType="{x:Type c:PVStructuralTreeView}" BasedOn="{StaticResource DefaultPVStructuralTreeView}"/>
TreeView的默认样式(它非常大,所以我不会在这里发布):
<Style TargetType="{x:Type TreeView}" BasedOn="{StaticResource DefaultTreeView}"/>
在color template.xaml文件中,我希望能够同时应用这两种风格(来自Generic.xaml和主题风格):
<Style x:Key="ThemedTreeView" TargetType="{x:Type TreeView}" BasedOn="{StaticResource DefaultTreeView}">
...
</Style>
<Style TargetType="{x:Type c:PVStructuralTreeView}" BasedOn="{StaticResource ThemedTreeView}"/>
但它只是覆盖generic.xaml样式。我希望它添加到它。
现在我这样做:
<Style x:Key="ThemedPVStructuralTreeView" TargetType="{x:Type c:PVStructuralTreeView}" BasedOn="{StaticResource DefaultPVStructuralTreeView}">
... CopyPaste from ThemedTreeView ...
</Style>
<Style TargetType="{x:Type c:PVStructuralTreeView}" BasedOn="{StaticResource ThemedPVStructuralTreeView}"/>
有谁知道如何在这里重用ThemedTreeView样式?
答案 0 :(得分:0)
您可以使用Style
属性将Style
基于另一个(仅限一个!)BasedOn
并覆盖特定属性,但不能基于DataTemplate
或{ {1}}在另一个模板上。这不受支持。必须将模板定义为整体:
WPF: Is there a way to override part of a ControlTemplate without redefining the whole style?