确定是否继承了WPF DependencyProperty值

Mic*_*itt 10 wpf datacontext inheritance dependency-properties

有谁知道如何确定WPF属性的值是否被继承?特别是,我试图确定DataContexta FrameworkElement是从父级继承还是直接在元素本身上设置.

Ken*_*art 15

DependencyPropertyHelper.GetValueSource会给你一个ValueSource,其中包括一个用于检索的属性BaseValueSource.该BaseValueSource枚举告诉您的DependencyProperty是,从获取其价值,如父母继承,通过样式设置或本地设置.


Mik*_*nen 0

经过更多挖掘后更新

有一种ReadLocalValue方法是愚蠢的 Read 而不是 Get,在智能感知中很难发现。(我认为 Apress 的 WPF 书中实际上对此有说明。)如果尚未设置该值,它将返回UnsetValue 。

if (ReadLocalValue(Control.DataContextProperty) != 
    DependencyProperty.UnsetValue)
{
    // Data context was set locally.
}
Run Code Online (Sandbox Code Playgroud)

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

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

这两种方法确实让我感到好奇。在 ReadLocalValue 中读取而不是 Get 以及无法在 GetLocalValueEnumerator 中使用 foreach 迭代的集合。就好像 .Net 有这些很好的标准东西,但 WPF 团队却决定忽略它们。