WPF更改ItemContainerStyle但保留引用的基本样式

时间:2019-04-18 15:22:41

标签: .net wpf styles resourcedictionary itemcontainerstyle

我在来自第三方dll(MaterialDesign)的ResourceDictionaries中有一些样式

 <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Dark.xaml" />

我有一个TreeView,由于在UserControl的资源字典中添加了这些样式,因此可以得到很酷的动画效果。

稍后,我计划实现某种方式,以便用户可以在三个词典的三种样式之间进行切换。 建议如何最好地实施。

我有一个TreeView,需要更改其行为,以便某些Item(或Nodes可能更正确)应该始终根据“绑定到VM”属性来扩展其子级。同样,当我在树形视图中选择一个项目时,该项目的子树也会自动展开。当我离开该项目时,除非将其设置为始终展开,否则子树应该折叠。通过编辑TreeView的ItemContainerStyle的副本,我设法做到了所有这些。

问题和我的问题,一旦我定义/编辑自己的ItemContainerStyle副本,我就会失去所有动画效果,因为它会覆盖MaterialDesign资源中的默认设置样式。 如何确保我的ItemContainerStyle也保留来自MaterialDesign引用的ResourceDictionary中的动画和样式?

1 个答案:

答案 0 :(得分:1)

默认样式的键是它的类型。 因此,您可以使用基于这样的密钥。

     <TreeView.ItemContainerStyle>
         <Style TargetType="{x:Type TreeViewItem}"  BasedOn="{StaticResource {x:Type TreeViewItem}}"  >