WPF:如何放弃所有继承的样式?

WPF:如何放弃所有继承的样式?,wpf,styles,Wpf,Styles,如何告诉控件或控件块不要继承任何样式并恢复为默认值 我需要这个,因为我有一个总体主题,大部分都很有效,但对于一件作品来说,我的设计真的很糟糕。这很棘手,但你可以试试这个 创建DefaultStyles资源字典 创建要保留默认样式的控件的命名样式,如下所示 <Style x:Key="DefaultButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}

如何告诉控件或控件块不要继承任何样式并恢复为默认值


我需要这个,因为我有一个总体主题,大部分都很有效,但对于一件作品来说,我的设计真的很糟糕。

这很棘手,但你可以试试这个

  • 创建DefaultStyles资源字典
  • 创建要保留默认样式的控件的命名样式,如下所示

    <Style 
        x:Key="DefaultButtonStyle" 
        TargetType="{x:Type Button}"  
        BasedOn="{StaticResource {x:Type Button}}"/>
    
    
    
  • 确保在应用任何主题之前添加此DefaultStyles,它应该是应用程序资源中的第一个条目

  • 然后,您可以在运行时将样式“DefaultButtonStyle”应用于任何控件,以保留其默认样式


  • 您可以为相关UI创建自己的容器,并设置为
    SkipAllNow
    (或适合您的情况的值):


    然后,您可以将
    NoInheritanceContentControl
    粘贴到可视化树中,其中的任何内容都不会继承样式。

    这会断开与外部和继承数据上下文的绑定。(在任何子级中)合并的资源字典不再向
    BasedOn=“{StaticResource{x:Type…}”
    提供样式。我修补了两天,运气不好。:/如果我遗漏了什么,请告诉我。
    using System.Windows;
    using System.Windows.Controls;
    
    public class NoInheritanceContentControl : ContentControl
    {
        public NoInheritanceContentControl()
        {
            InheritanceBehavior = InheritanceBehavior.SkipAllNow;
        }
    }