用户控件设计时间 属性 未显示在属性 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 中配置 属性,但是我假设您知道自己的要求,现在您可以根据自己的要求做出决定。
设计师是这样工作的:
- 它反序列化
.cs
文件(并查找 InitializeComponent 方法,或 designer.cs 文件,还考虑了 designer-related 属性)。
- 它创建一个基础 class 的实例并将其添加到设计表面,并应用反序列化的 属性 值。 (因此,您在设计器中看到的实例是基 class 的实例。这是一个技巧。例如,这就是为什么如果您有一个抽象基 class,则不能派生 class 作为根设计师,没有一些解决方法。)
- 它根据反序列化代码创建整个 control/component 树。 (所以设计图面上的控件是控件的真实实例)
当然还有很多其他事情正在发生,比如让扩展程序提供程序工作,或者 pre-filtering 或 post-filtering design-time 中的属性,但总的来说它是这样工作的我在上面解释了。
更多信息/相关帖子
其他一些相关回答:
- 类似的 question/answer 表格:
- 解释设计器工作原理的答案,还包含一个有趣的示例,说明如何在设计器中显示充满语法错误的 .cs 文件:
我有一个带有自定义 属性:
的用户控件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 中配置 属性,但是我假设您知道自己的要求,现在您可以根据自己的要求做出决定。
设计师是这样工作的:
- 它反序列化
.cs
文件(并查找 InitializeComponent 方法,或 designer.cs 文件,还考虑了 designer-related 属性)。 - 它创建一个基础 class 的实例并将其添加到设计表面,并应用反序列化的 属性 值。 (因此,您在设计器中看到的实例是基 class 的实例。这是一个技巧。例如,这就是为什么如果您有一个抽象基 class,则不能派生 class 作为根设计师,没有一些解决方法。)
- 它根据反序列化代码创建整个 control/component 树。 (所以设计图面上的控件是控件的真实实例)
当然还有很多其他事情正在发生,比如让扩展程序提供程序工作,或者 pre-filtering 或 post-filtering design-time 中的属性,但总的来说它是这样工作的我在上面解释了。
更多信息/相关帖子
其他一些相关回答:
- 类似的 question/answer 表格:
- 解释设计器工作原理的答案,还包含一个有趣的示例,说明如何在设计器中显示充满语法错误的 .cs 文件: