有谁知道如何确定是否继承了WPF属性的值?特别是,我正在尝试确定DataContext
的{{1}}是从父项继承还是直接在元素本身上设置。
答案 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团队刚刚决定忽略的那些不错的标准内容。