Заставить дизайнера Visual Studio игнорировать публичное свойство
У меня есть UserControl с открытым свойством, используя следующие атрибуты:
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
Я попытался удалить форму владельца, заново создать новую форму в Visual Studio 2010 и добавить этот пользовательский элемент управления в форму. Он продолжает добавлять строку, подобную следующей в файле Designer:
this.vMyUserControl.MyProperty = ((MyNamespace.MyClass)(resources.GetObject("vMyUserControl.MyProperty")));
Это приводит к сбою моего приложения, потому что это свойство не предназначено для создания при сериализации.
4 ответа
Я не смог найти реальное решение, но вместо этого...
Мне нужно было зайти в файл Form.resx и найти пару ключей данных / значений, которые они десериализовали, в мою публичную собственность. Я вручную удалил содержимое пары XML, а затем смог запустить приложение.
Это позволило моему приложению создавать и запускать без ошибок. Все остальное, что я пробовал (включая удаление формы контейнера для моего UserControl и повторное ее создание повторно), не сработало.
Создание свойства только для чтения во время разработки предотвратит его сериализацию в файл resx. Как ни странно, если MyType является коллекцией, конструктор игнорирует только чтение, и вы все равно можете установить свойство во время разработки, даже если это свойство не записано в resx, поэтому лучше сделать это свойство не доступным для просмотра.
[ReadOnly(true)]
[Browsable(false)]
public MyType MyProperty
{
get { return _MyProperty; }
set { _MyProperty = value; }
}
Использование [DesignerSerializationVisibilityAttribute ( Visibility = Hidden )]
Попробуйте использовать личное поле с методами доступа свойства вместе с атрибутом [field: NonSerialized]:
[field: NonSerialized]
private MyType _MyProperty;
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public MyType MyProperty
{
get
{
return _MyProperty;
}
set
{
_MyProperty = value;
}
}