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

时间:2008-12-03 21:17:33

标签: wpf styles

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

2 个答案:

答案 0 :(得分:3)

看来你可以这样做:

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()

另外,请看一下这篇文章:Default Templates in WPF

答案 1 :(得分:-1)

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

string styleKeyName = DefaultStyleKeyProperty.Name;

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