Как запретить представлению Design View использовать конструктор по умолчанию? - PullRequest
0 голосов
/ 04 августа 2011

Ситуация: я делаю складную панель. В моей деловой ситуации мне необходимо, чтобы панель поддерживала следующее:

  • «Направление» (т. Е. Будет ли оно стыковаться сверху, снизу, слева или справа). Это меняет направление падения и некоторые другие вещи.

  • «Стиль». Для этого продукта есть несколько предопределенных визуальных стилей (определение цвета фона, градиента или нет, цвета текста, цвета при наведении и т. Д.).

Вот проблема: некоторые стили несовместимы с определенными направлениями. Вот требования:

  • Должен быть какой-то способ предотвратить / предупредить программиста, если он / она закодировал панель, чтобы иметь несовместимый стиль и направление. Например, если панель выдает исключение времени выполнения, если они несовместимы, это удовлетворяет этому требованию.

  • Не разрешать кому-либо динамически изменять стиль или направление во время выполнения. Если мне нужно, то я могу позволить «динамически» изменять его в InitializeComponent, но не где-либо еще.

  • Панель должна быть видна в режиме конструктора. но не обязательно обязательно , который можно перетаскивать в режиме конструктора, и технически мне даже не нужно изменять атрибуты панели в режиме конструктора. Хотя я, очевидно, хочу любую из этих вещей, если это возможно.

Одно потенциальное решение: пусть конструктор выберет два входа: направление и стиль. Таким образом, оба изменения рассматриваются как атомарное действие. Если они не будут изменены одновременно, то между изменением направления / стиля и последующим изменением другого панель будет в несогласованном состоянии. Я хочу этого избежать.

Как я могу заставить представление конструктора не использовать конструктор по умолчанию и / или как лучше выполнять требования?

Примечание

Панель - только пример и пример использования, чтобы задать более широкий вопрос. Я хочу, чтобы эта публикация ответила на прямой вопрос о передовых методах получения представления дизайна для удовлетворения моих требований. Если Visual Studio поддерживает внедрение конструктора не по умолчанию в InitializeComponent, то я хочу знать, как (и любые предупреждения с этим). Если есть лучшие практики, которые соответствуют перечисленным требованиям, я бы тоже хотел это знать.

Ответы [ 2 ]

3 голосов
/ 04 августа 2011

Добавлена ​​поддержка интерфейса ISupportInitialize, который дизайнер может использовать для установки всех свойств и уведомления о его завершении.

2 голосов
/ 04 августа 2011

Частичный ответ: вы не можете заставить конструктора использовать какой-то пользовательский конструктор.Вам нужно будет поместить логику в установщики свойств.

Создание исключений может привести к грязным ошибкам конструктора.Как насчет сброса полей в какое-то правильное состояние?

Вам, вероятно, нужно будет различать поведение в зависимости от того, находитесь ли вы в DesignMode.Если вы еще этого не сделали, взгляните на соображения DesignMode .

...