用户控件设计时属性未显示在属性窗口中

问题描述 投票:0回答:2

我有一个带有自定义属性的用户控件:

public Size TestSize { get; set; }

我希望此属性在 UserControl 的设计时显示在属性窗口中,而不仅仅是在将 UserControl 用作实例时(例如,在表单上拖/放时)。

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

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

[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]

但这似乎不是正确的方法。

如有任何帮助,我们将不胜感激!

c# winforms user-controls windows-forms-designer designer
2个回答
2
投票

如果你真的想在

UserControl1
的设计器中显示该属性,那么该属性应该属于其基类。那是因为设计师的工作方式

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

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


这就是设计师的工作方式:

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

当然,还有很多其他事情发生,例如使扩展程序提供程序正常工作,或者在设计时预过滤或后过滤属性,但总的来说,它的工作原理就像我上面解释的那样。

更多信息/相关帖子

其他一些相关答案:


0
投票

我知道旧帖子,但也遇到了同样的问题。 重新编译并重新打开表单的设计器视图解决了我的问题。 使用 VS2022 和 C# 以及框架 4.5

© www.soinside.com 2019 - 2024. All rights reserved.