【问题标题】:Is there a list of Attribute classes that can be applied to a DependencyProperty?是否有可以应用于 DependencyProperty 的属性类列表?
【发布时间】:2010-01-21 17:55:48
【问题描述】:

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

【问题讨论】:

  • 你能举一个你试图解决的问题的例子吗?
  • 我想在我的控件上有一个属性,它可以接受一组特定的值。我只是使用了一个枚举,但我想嘿也许有一个属性来指示有效值(在设计时,而不是运行时)。然后我开始想知道可能存在哪些属性,这引发了这个问题。所以问题解决了,我只是好奇。

标签: wpf silverlight xaml dependency-properties


【解决方案1】:

据我所知,这不是用于装饰 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 使用相比,上面的内容实际上非常简洁。如果你不这样做,那么没有任何东西可以帮助你。

【讨论】:

  • 谢谢。这说得通。我以为我之前遇到过属性依赖属性,但这可能是我的想象。
猜你喜欢
  • 2019-10-20
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
相关资源
最近更新 更多