我最近在使用DataGridTextColumn的Visibility属性进行数据绑定时遇到了问题。混淆是因为这个属性在WPF中是一个依赖属性,但在Silverlight中不是。
我认为MSDN文档没有很清楚地表明这一点。以下是WPF的唯一相关文本。
"有关可能影响该值的信息,请参阅DependencyProperty。"
我最近在使用DataGridTextColumn的Visibility属性进行数据绑定时遇到了问题。混淆是因为这个属性在WPF中是一个依赖属性,但在Silverlight中不是。
我认为MSDN文档没有很清楚地表明这一点。以下是WPF的唯一相关文本。
"有关可能影响该值的信息,请参阅DependencyProperty。"
FooProperty
的静态字段类型为 DependencyProperty
来检测属性 Foo
是否为 DP。然而,这只是一个约定,并不能保证所有的依赖属性都会遵循这种模式。已经有答案了,我知道。在“TextBlock”中,“Text”属性是一个依赖属性,你可以通过Intellisense显示静态字段来确定:
TextBlock.TextProperty
public static bool TryEvaluateProperty(this FrameworkElement fe, string property, out object value, out DependencyProperty dp)
{
value = default;
dp = default;
var feType = fe.GetType();
var propertyInfo = feType.GetProperty(property, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty);
if (propertyInfo == null) return false;
value = propertyInfo.GetValue(fe);
var dpName = property + "Property"; //ASSUMPTION: Definition uses DependencyProperty naming convention
while (feType != null)
{
var dpField = feType.GetField(dpName, BindingFlags.Static | BindingFlags.Public);
if (dpField != null)
{
dp = dpField.GetValue(null) as DependencyProperty; //use obj==null for static field
break;
}
feType = feType.BaseType;
}
return true;
}