我开发了自定义TreeView
(称之为MyTree
)。在这个自定义控件中,我为设置控件模板定义了样式ResourceDictionary
,我需要显示每个项目。首先,我创建了特殊的 ControlTemplate:General.xaml
TreeViewItem
<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 中的自定义样式。为什么会发生,以及如何避免这种情况,结合所有风格。