Есть ли список классов атрибутов, которые могут быть применены к DependencyProperty? - PullRequest
1 голос
/ 21 января 2010

Я работаю над проблемой, которая, кажется, может быть решена путем применения атрибута к DependencyProperty. Мне стало любопытно, и я не могу найти документацию, в которой перечислены все классы XXXAttribute, которые применяются к DependencyProperties и для чего используются атрибуты. Кто-нибудь знает что-нибудь подобное? Если нет, возможно, опубликуйте некоторые атрибуты, которые вы использовали, и для чего вы использовали их в прошлом? Может быть, их нет?

1 Ответ

1 голос
/ 22 января 2010

Это не те атрибуты, о которых я знаю, которые предназначены для украшения свойства зависимости.

Конечно, вы можете украсить класс Property, который использует свойство Dependency или даже статическое поле, в котором содержится ссылка на 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, то вышеупомянутое на самом деле довольно аккуратно по сравнению с использованием атрибутов. Если нет, то ничто не поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...