Заставить дизайнера Visual Studio игнорировать публичное свойство - PullRequest
11 голосов
/ 16 октября 2011

У меня есть UserControl с открытым свойством, использующим следующие атрибуты:

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

Я попытался удалить форму владельца, заново создать новую форму в Visual Studio 2010 и добавить этот элемент управления пользователя в форму. Он продолжает добавлять строку, подобную следующей в файле Designer:

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

Это приводит к сбою моего приложения, поскольку это свойство не предназначено для создания при сериализации.

Ответы [ 4 ]

11 голосов
/ 21 октября 2013

Создание свойства только для чтения во время разработки предотвратит его сериализацию в файл resx. Как ни странно, если MyType является коллекцией, конструктор игнорирует только чтение, и вы все равно можете установить свойство во время разработки, даже если это свойство не записано в resx, поэтому лучше сделать это свойство недоступным для просмотра.

[ReadOnly(true)]
[Browsable(false)]
public MyType MyProperty
{
    get { return _MyProperty; }
    set { _MyProperty = value; }
}
5 голосов
/ 16 октября 2011

Использование [DesignerSerializationVisibilityAttribute ( Visibility = Hidden )]

MSDN Артикул

2 голосов
/ 18 октября 2011

Попробуйте использовать личное поле с методами доступа свойства вместе с атрибутом [field: NonSerialized]:

[field: NonSerialized]
private MyType _MyProperty;

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public MyType MyProperty
{
    get
    {
        return _MyProperty;
    }
    set
    {
        _MyProperty = value;
    }
}
1 голос
/ 18 октября 2011

Мне не удалось найти реальное решение, но вместо этого я нашел обходной путь ...

Мне нужно было зайти в файл Form.resx и найти пару ключей данных / значений, которые он десериализовал, в моем общедоступном свойстве. Я вручную удалил содержимое пары XML и смог запустить приложение.

Это позволило моему приложению создавать и запускать без ошибок. Все остальное, что я пробовал (включая удаление формы контейнера для моего UserControl и повторное ее создание), не сработало.

...