有谁知道如何确定 WPF 属性的值是否是继承的?特别是,我试图确定DataContext
aFrameworkElement
是从父级继承还是直接设置在元素本身上。
问问题
1984 次
2 回答
19
DependencyPropertyHelper.GetValueSource
会给你一个ValueSource
,其中包括一个用于检索BaseValueSource
. BaseValueSource
枚举告诉您从哪里获取DependencyProperty
它的值,例如从父级继承、通过样式设置或在本地设置。
于 2009-04-30T22:48:25.387 回答
0
更多挖掘后更新
有一种ReadLocalValue
方法是愚蠢的 Read 而不是 Get 在智能感知中很难发现。(我认为 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
}
}
而这两种方法真的让我很纳闷。在 ReadLocalValue 中读取而不是 Get 以及在 GetLocalValueEnumerator 中无法使用 foreach 迭代的集合。就像 .Net 具有 WPF 团队刚刚决定忽略的这些不错的标准内容。
于 2009-04-30T20:54:55.940 回答