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



我有一个具有自定义属性的UserControl:

public Size TestSize { get; set; }

我希望这个属性在UserControl的设计时显示在属性窗口中,而不仅仅是在UserControl用作实例的地方(例如,在窗体上拖放时(。

示例:在UserControl的设计器中;AllowDrop"AutoScroll"背景颜色";等等。我希望我的自定义属性在设计师中以同样的方式显示。

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

[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]

但这似乎不是我们要走的路。

感谢您的帮助!

如果您真的想在UserControl1的设计器中显示该属性,那么该属性应该属于它的基类。这是因为设计师如何工作

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

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


这是设计师的工作方式:

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

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

更多信息/相关文章

其他一些相关答案:

  • Form的类似问题/答案:Form在设计时的自定义可浏览属性
  • 一个解释设计器如何工作的答案,还包含一个有趣的例子,展示了如何在设计器中显示充满语法错误的.cs文件:Windows窗体设计器如何工作

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

最新更新