使Visual Studio设计器忽略公共属性

本文关键字:属性 Visual Studio | 更新日期: 2023-09-27 18:11:27

我有一个UserControl的公共属性使用以下属性:

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

我试过删除所有者表单,在Visual Studio 2010中重新创建一个新表单,并将此UserControl添加到表单中。它一直在Designer文件中添加如下行:

this.vMyUserControl.MyProperty = ((MyNamespace.MyClass)(resources.GetObject("vMyUserControl.MyProperty")));

这会使我的应用程序崩溃,因为这个属性不是通过序列化来创建的。

使Visual Studio设计器忽略公共属性

在设计时将属性设置为只读将防止它被序列化到resx文件中。奇怪的是,如果MyType碰巧是一个集合,只读会被设计器忽略,你仍然可以在设计时设置该属性,即使该属性没有写入到resx中,所以最好也使该属性不可浏览。

[ReadOnly(true)]
[Browsable(false)]
public MyType MyProperty
{
    get { return _MyProperty; }
    set { _MyProperty = value; }
}

使用[DesignerSerializationVisibilityAttribute ( Visibility = Hidden )]

MSDN文章

尝试将私有字段与属性的访问方法以及[field: NonSerialized]属性一起使用:

[field: NonSerialized]
private MyType _MyProperty;
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public MyType MyProperty
{
    get
    {
        return _MyProperty;
    }
    set
    {
        _MyProperty = value;
    }
}

我没能找到一个真正的解决方案,而是一个变通的方法…

我必须进入表单。Resx文件,并找到它反序列化到我的公共属性的数据/值密钥对。我手动删除了XML对内容,然后就可以运行应用程序了。

这允许我的应用程序构建和运行没有错误。我尝试的其他一切(包括删除我的UserControl的容器表单并反复重新创建它)都不起作用。