我开发了自定义TreeView
(称之为MyTree
)。在ResourceDictionary
这个自定义控件的General.xaml
中,我为TreeViewItem
定义了设置控件模板的样式,我需要显示每个项目。首先,我创建了特殊的ControlTemplate:
<ControlTemplate TargetType="{x:Type TreeViewItem}" x:Key="MyTreeViewItem">
.........
</ControlTemplate>
然后我在MyTree
的自定义样式中使用它:
<Style TargetType="{x:Type local:MyTree}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyTree}">
<ControlTemplate.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Template" Value="{StaticResource MyTreeViewItem}" />
</Style>
</ControlTemplate.Resources>
..........
<ItemsPresenter />
..........
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
一切正常,而我使用我的控件:
<local:MyTree>
<local:MyTree.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding DependentSuites}"/>
</local:MyTree.ItemTemplate>
..........other property specific for MyTree control.............
</local:MyTree>
enter code here
当我尝试为TreeViewItem添加样式时,它确实出错了。例如,以下代码
<local:MyTree>
<local:MyTree.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding DependentSuites}"/>
</local:MyTree.ItemTemplate>
..........other property specific for MyTree control.............
<local:MultiColumnTreeView.Resources>
<Style TargetType="TreeViewItem"
<Setter Property="Background" Value="Red"/>
</Style>
</local:MultiColumnTreeView.Resources>
</local:MyTree>
导致wpf重置我的自定义模板并开始使用TreeViewItem的默认样式。如果我为ItemsContainerStyle设置任何值,则会出现相同的情况。换句话说,任何样式修改都会在General.xaml中重写我的自定义样式。为什么会这样,以及如何避免这种情况,结合所有风格。
答案 0 :(得分:2)
您可以将其基于您想要的任何现有样式,并且只修改实例所需的内容,就像您使用Style
BasedOn Property一样;
<Style TargetType="TreeViewItem"
BasedOn="{StaticResource YourExistingStyleYouWantToBaseItOn}">
<Setter Property="Background" Value="Red"/>
</Style>
希望这有助于。