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

问题描述 投票:0回答:1

我在第三方dll(Material Design)的资源字典中有一些样式

 <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,我需要改变它的行为,这样一些Items(或节点可能更正确)应该让他们的孩子总是根据绑定到VM属性进行扩展。此外,当我在树视图中选择项目时,项目的子树应自动展开。当我离开项目时,除非将childtree设置为始终展开,否则它应该会崩溃。我已经设法通过编辑TreeView的ItemContainerStyle的副本来完成所有这些。

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

.net wpf styles resourcedictionary itemcontainerstyle
1个回答
1
投票

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

     <TreeView.ItemContainerStyle>
         <Style TargetType="{x:Type TreeViewItem}"  BasedOn="{StaticResource {x:Type TreeViewItem}}"  >
© www.soinside.com 2019 - 2024. All rights reserved.