据我所知,这不是用于装饰 Dependency 属性的属性。
当然,您可以修饰使用 Dependency 属性的类 Property,甚至可以修饰包含对 DependencyProperty 的引用的静态字段:-
public class MyClass : DependencyObject
{
[PossibleLocationForPropertyAttribute()]
public string Description
{
get { return (string)GetValue(DescriptionProperty); }
set { SetValue(DescriptionProperty, value); }
}
[PossibleLocationForFieldAttribute()]
public static readonly DependencyProperty DescriptionProperty =
DependencyProperty.Register("Description", typeof(string), typeof(MyClass), null);
}
但是,当您所拥有的只是对依赖项属性的引用时,这些都对您没有帮助。不幸的是,您无法将附加数据附加到依赖属性,而无需了解它所针对的注册类型即可检索。
我从来没有真正尝试过,但是......
public MyExtendedPropertyMetaData : PropertyMetaData
{
public object Token {get; private set;}
public MyExtendedPropertyMetaData(object token) : PropertyMetaData(null)
{
Token = token;
}
}
public static readonly DependencyProperty DescriptionProperty =
DependencyProperty.Register("Description", typeof(string), typeof(MyClass),
new MyExtendedMetaData("Some token could be anything"));
现在只给出一个 DP 和,你知道它已注册到 MyClass 然后:-
var meta = dp.GetMetaData(typeof(MyClass)) as MyExtendedPropertyMetadata;
string tokenData = (string)meta.Token;
如果确实知道 DP 注册的类型,那么与 Attribute 使用相比,上面的内容实际上非常简洁。如果你不这样做,那么没有任何东西可以帮助你。