Возможно ли определить свойство, для которого требуется пользовательский элемент управления WPF?

#wpf

Вопрос:

При создании пользовательского элемента управления WPF можно ли сделать свойство обязательным с помощью атрибута или другого механизма?

Комментарии:

1. Знаете ли вы какие-либо классы, которые уже делают то, что вы ищете?

2. Есть ли какая-то реальная причина для этого? Можете ли вы просто выбрать хороший дефолт? Это противоречит тому, как настроен весь WPF.

Ответ №1:

Присвойте свойству начальное значение, которое можно отличить от любого другого значения, для которого оно может быть установлено (т. Е. Значение null для ссылочных типов).

В тот момент, когда вам понадобится свойство, если оно не было установлено (это.Свойство == Не имеет значения), вызовите исключение InvalidOperationException с описанием проблемы.

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

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

Более быстрым решением может быть реализация ISupportInitialize, которая позволит вам проверить свойство во время десериализации, после чего вы сможете создать исключение. Вот сообщение об этом в блоге Relyea об этом.

Комментарии:

1. Хорошее предложение, но я ищу что-то, что выдаст ошибку XAML, когда они попытаются скомпилировать страницу/окно, в котором используется элемент управления.

2. Привет, как дела с этим? Я действительно ищу тот же код, который не будет компилироваться, если свойство certian не было настроено из XAML.