我知道我是一个变态,但我很好奇,有没有办法让自定义控件首先寻找它的基类风格,然后它是自己的。 为什么我问:我有一些TreeView派生控件与自定义项目模板。我应用这些模板,然后我有一个基本风格。稍后我可能会应用一些调色板。在最后一步,我有一个问题。我需要应用2种风格。 PVStructuralTree是从TreeView派生的,它具有一些DependencyProperty DataTemplates,它们被插入到代码中的资源中。WPF样式和多态性
PVStructuralTreeView
- EmploeeTemplate
- ...更多模板
默认样式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}"/>
在色彩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风格?
我写到这里完全覆盖通用样式。我想建立它,而不是重写。我在Template.xaml中将ThemedTreeView样式复制到PVStructuralTreeView的样式中,当我想构建现有的样式时,不复制代码。 –
您不能将样式基于其他两种样式。 – mm8