是否有可以应用于DependencyProperty的属性类列表?

时间:2010-01-21 17:55:48

标签: wpf silverlight xaml dependency-properties

我正在研究一个似乎可以通过将属性应用于DependencyProperty来解决的问题。我很好奇,我找不到列出适用于DependencyProperties的所有XXXAttribute类的文档以及这些属性的用途。有谁知道这样的事情?如果没有,可能会发布您使用过的某些属性以及过去使用过的属性?也许没有?

1 个答案:

答案 0 :(得分:1)

这不是我所知道的用于装饰依赖属性的属性。

当然,你可以装饰使用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注册的类型,那么与属性使用相比,上面实际上非常整洁。如果你不这样做,那么没有什么能帮助你。