【问题标题】:WPF change ItemContainerStyle but keep a referenced base styleWPF 更改 ItemContainerStyle 但保留引用的基本样式
【发布时间】:2019-09-08 23:26:40
【问题描述】:

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

 <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" />

由于这些样式被添加到我的 UserControl 的资源字典中,我有一个 TreeView,它获得了很酷的动画效果。

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

我有一个 TreeView,我需要更改它的行为,以便某些项(或节点可能更正确)应该始终根据绑定到 VM 属性来扩展其子项。此外,当我在树视图中选择一个项目时,该项目的子树应该会自动展开。当我离开该项目时,子树应该折叠,除非它设置为始终展开。我已经设法通过编辑 TreeView 的 ItemContainerStyle 的副本来完成所有这些工作。

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

【问题讨论】:

    标签: .net wpf styles resourcedictionary itemcontainerstyle


    【解决方案1】:

    默认样式的关键是它的类型。 因此,您可以将 based on 与这样的键一起使用。

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

    【讨论】:

    • 这很容易,而且我真的希望这是可能的。直到星期二我才在电脑前,但我会先试一试。非常感谢!
    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 2023-04-06
    • 2011-09-26
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多