你有一个真实世界的AttachedPropertyBrowsableWhenAttributePresentAttribute用法的例子吗?

时间:2010-01-14 16:20:43

标签: wpf attached-properties

我刚遇到AttachedPropertyBrowsableWhenAttributePresentAttribute,但想不出它什么时候会有用。任何理想?

1 个答案:

答案 0 :(得分:7)

Browsable意味着设计师(如Visual Studio的WPF设计者名为Cider)在设计器中显示该属性。由于附加属性不是类型的实际属性,并且可以应用于几乎类型,因此设计者很难知道何时显示或不显示属性。这些属性是开发人员让设计者知道应该在设计器中显示某个附加属性的一种方式。换句话说:可浏览。此特定属性允许设计人员知道此附加属性应该可以在应用了指定属性的类型上浏览。

附属物:

public class WhenAttributePresentTestControl : Grid
{
    public static readonly DependencyProperty ShowWhenCustomAttributePresentProperty = DependencyProperty.RegisterAttached(
      "ShowWhenCustomAttributePresent",
      typeof(int),
      typeof(WhenAttributePresentTestControl));

    public static void SetShowWhenCustomAttributePresent(UIElement element, int value)
    {
        element.SetValue(ShowWhenCustomAttributePresentProperty, value);
    }

    [AttachedPropertyBrowsableWhenAttributePresentAttribute(typeof(MyCustomAttribute))]
    public static int GetShowWhenCustomAttributePresent(UIElement element)
    {
        return (int)element.GetValue(ShowWhenCustomAttributePresentProperty);
    }
}

用法示例:

[MyCustomAttribute]
public class CustomLabel : Label
{
}

public class CustomLabelNoCustomAttribute : Label
{
}

设计器将在CustomLabel的属性编辑器中显示ShowWhenCustomAttributePresent附加属性,但不会显示CustomLabelNoCustomAttribute。

来源: http://blogs.msdn.com/jnak/archive/2008/01/17/showing-attached-properties-in-the-cider-wpf-designer.aspx

实际使用情况: 我在使用Reflector的.Net框架中找不到这个属性的任何用法。

有趣的旁注:显然它也是.Net 3.0框架的longest type name