我正在构建一个带有公共(public)属性的自定义 Web 控件,我只希望在设计时可用(即使其在代码隐藏中不可用)。
DesignOnly
属性 promise 这样做,但是当我设置 [DesignOnly(true)]
时,它没有任何明显的效果:
[Bindable(true)]
[Category("Appearance")]
[DefaultValue(null)]
[Localizable(false)]
[DesignOnly(true)]
public string MyProp
{
get
{
return ViewState["MyProp"] as string;
}
set
{
ViewState["MyProp"] = value;
}
}
属性仍然 出现在 IntelliSense 背后的代码中。在 works 后面的代码中为其设置一个值。在这些方面,行为就像从未设置过该属性一样。我已经清理并重建了完整的解决方案。两次。
我做错了吗?那么,您能告诉我解决这个问题的正确方法是什么吗?
非常感谢。
最佳答案
The DesignOnly attribute promises to do just that
实际上,没有;它试图在代码不可用时访问它时弄清楚;如果您撒谎(即声称某些东西在 可用时才设计),那么您应该预料到它会行为不端。编译器知道什么是可用的,并且此仅设计属性未在 C# 规范中定义,因此添加此属性对编译器没有影响。
尝试添加:
[EditorBrowsable(EditorBrowsableState.Never)]
代码编辑器 (IDE) 查看(但仅在使用单独的程序集时)- 请注意,这不会阻止您使用它 - 它只是隐藏它。
我相信 MSDN 文本试图描述代码中实际存在的属性与仅假装存在的属性之间的区别;实际上,您可以做各种事情来使设计器中出现虚假属性,而正是这些伪装 属性可能被标记为仅限设计。
关于c# - DesignOnly 属性不会在运行时隐藏属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2080618/