Wpf 如何在运行时确定应用于对象的样式是否为默认样式?

Wpf 如何在运行时确定应用于对象的样式是否为默认样式?,wpf,styles,Wpf,Styles,如果当前样式是默认样式,我希望能够在运行时将样式应用于对象。我不想覆盖任何用户定义的样式。有人知道怎么做吗?检查DefaultStyleKeyProperty,它是任何自定义控件的静态属性 string styleKeyName = DefaultStyleKeyProperty.Name; 通常,如果没有与控件关联的样式,则名称将为“DefaultStyleKey”您可以这样做: DependencyPropertyHelper.GetValueSource( someControl

如果当前样式是默认样式,我希望能够在运行时将样式应用于对象。我不想覆盖任何用户定义的样式。有人知道怎么做吗?

检查DefaultStyleKeyProperty,它是任何自定义控件的静态属性

string styleKeyName = DefaultStyleKeyProperty.Name;

通常,如果没有与控件关联的样式,则名称将为“DefaultStyleKey”

您可以这样做:

DependencyPropertyHelper.GetValueSource(
    someControl, FrameworkElement.StyleProperty).BaseValueSource 
    == BaseValueSource.Default;
您可以将其封装在扩展方法中,如下所示:

static public bool HasDefaultStyle(this FrameworkElement item)
{
    return DependencyPropertyHelper.GetValueSource(
        item, FrameworkElement.StyleProperty).BaseValueSource 
        == BaseValueSource.Default;
}
然后您可以调用
someControl.HasDefaultStyle()

另外,请看一下这篇文章: