用户控件设计时间 属性 未显示在属性 window 中

User control design time property not showing in properties window

我有一个带有自定义 属性:

的用户控件
public Size TestSize { get; set; }

我希望这个 属性 在 UserControl 的设计期间显示在属性 window 中,而不仅仅是在 UserControl 用作实例的地方(例如,当 dragged/dropped 在表格上)。

示例: 在 UserControl 的设计器中,可以设置“AllowDrop”、“AutoScroll”、“BackColor”等属性。我希望我的自定义 属性 在设计器中以相同的方式显示。

我已经考虑并尝试向 属性 添加属性,例如:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]

但这似乎不是解决之道。

感谢任何帮助!

如果你真的想在UserControl1的设计器中显示属性,那么属性应该属于它的基础class。那是因为设计师的工作方式

  • 假设设计器的根元素是 UserControl1,那么您在属性 window 中看到的属性是 UserControl1 的基础 class(可能是一个 UserControl)的可浏览属性。要了解更多信息,请阅读答案的第二部分。

在大多数情况下,您不需要在设计器中显示这些属性,除非您想从该基础派生多个控件并在派生控件的 design-time 中配置 属性,但是我假设您知道自己的要求,现在您可以根据自己的要求做出决定。


设计师是这样工作的:

  1. 它反序列化 .cs 文件(并查找 InitializeComponent 方法,或 designer.cs 文件,还考虑了 designer-related 属性)。
  2. 它创建一个基础 class 的实例并将其添加到设计表面,并应用反序列化的 属性 值。 (因此,您在设计器中看到的实例是基 class 的实例。这是一个技巧。例如,这就是为什么如果您有一个抽象基 class,则不能派生 class 作为根设计师,没有一些解决方法。)
  3. 它根据反序列化代码创建整个 control/component 树。 (所以设计图面上的控件是控件的真实实例)

当然还有很多其他事情正在发生,比如让扩展程序提供程序工作,或者 pre-filtering 或 post-filtering design-time 中的属性,但总的来说它是这样工作的我在上面解释了。

更多信息/相关帖子

其他一些相关回答:

  • 类似的 question/answer 表格:
  • 解释设计器工作原理的答案,还包含一个有趣的示例,说明如何在设计器中显示充满语法错误的 .cs 文件: