如何停止设计器为用户控件上的公共属性生成代码?

Posted

技术标签:

【中文标题】如何停止设计器为用户控件上的公共属性生成代码?【英文标题】:How do you stop the Designer generating code for public properties on a User Control? 【发布时间】:2010-09-06 23:30:57 【问题描述】:

如何阻止设计器自动生成设置用户控件公共属性值的代码?

【问题讨论】:

我想知道设计师对你的属性做鬼的目的是什么...... 我在打开设计器时遇到了问题,因为我不小心从我正在使用的旧版本的类库中序列化了一个对象。追踪繁琐:***.com/questions/28272552/… 【参考方案1】:

对要对设计器序列化隐藏的属性使用 DesignerSerializationVisibilityAttribute,并将参数设置为 Hidden。

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string Name

    get;
    set;

【讨论】:

如果基本表单具有绑定到一个控件的文本属性的公共属性,则非常有用。编辑器希望以继承的形式设置值,因此与本地化混淆。类似于 SO 上的another problem。【参考方案2】:

将以下属性添加到控件中的属性:

[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

【讨论】:

【参考方案3】:

我正在使用 VS 2013 对 Erik 的回答稍作改动。

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new string Name  
    get; 
    set; 

【讨论】:

不幸的是,我将该属性命名为“名称”。最好将其命名为不同的名称,因为所有控件都已具有 Name 属性。这就是您必须使用 new 关键字来隐藏基类属性的原因。 :) 是的,自从回答后我自己就犯了这个错误。 正如埃里克本人所提到的这个答案,并没有为实际问题添加任何新内容 不需要反对票,新的是必需的。请正确阅读 Erik 的回复。 @peterincumbria 如果您正在使用的类已经具有 name 属性并且您正在尝试编写自己的属性,这只是一个要求。因此,这不会为答案添加任何内容,因为属性是答案而不是新关键字。或者,我可以编写自己的答案,使用 override 关键字而不是 new 覆盖属性。

以上是关于如何停止设计器为用户控件上的公共属性生成代码?的主要内容,如果未能解决你的问题,请参考以下文章

用户控件属性设计器属性

无法访问用户控件上的公共属性wpf c#

如何在winforms设计器中公开用户控件的整个子控件

无法访问用户控制公共属性

c# winform 如何取得用户控件中 的值

如何从 viewmodel 访问用户控件上的命令