确定是否继承了WPF DependencyProperty值

时间:2009-04-30 20:28:50

标签: wpf inheritance datacontext dependency-properties

有谁知道如何确定是否继承了WPF属性的值?特别是,我正在尝试确定DataContext的{​​{1}}是从父项继承还是直接在元素本身上设置。

2 个答案:

答案 0 :(得分:15)

DependencyPropertyHelper.GetValueSource将为您提供ValueSource,其中包含用于检索BaseValueSource的属性。 BaseValueSource枚举会告诉您DependencyProperty从哪里获取其值,例如从父项继承,通过样式设置或在本地设置。

答案 1 :(得分:0)

更多挖掘后更新

有一个ReadLocalValue方法是愚蠢的阅读,而不是在智能感知中难以发现。 (我认为Apress的WPF书实际上对此有一个注释。)如果没有设置值,它将返回UnsetValue

if (ReadLocalValue(Control.DataContextProperty) != 
    DependencyProperty.UnsetValue)
{
    // Data context was set locally.
}

如果由于某种原因需要所有本地设置属性,则可以使用LocalValueEnumerator。

LocalValueEnumerator enumerator = GetLocalValueEnumerator();
while (enumerator.MoveNext())
{
    if (enumerator.Current.Property == Control.DataContextProperty)
    {
        // DataContext was set locally
    }
}

这两种方法真让我好奇。在GetLocalValueEnumerator中读取而不是在ReadLocalValue和一个无法使用foreach迭代的集合中读取。就像.Net拥有WPF团队刚刚决定忽略的那些不错的标准内容。