Я пытался создать специальный вид набора полей. Который делает все виды фантастических вещей, но в основном разрушается и поддерживает состояние. Также две части набора полей (в легенде и в остальных) должны быть доступны для кода (декларативно).
Код на странице или элементе управления должен выглядеть примерно так:
<myTagPrefix:Fieldset>
<myTagPrefix:Legend>[controls here should be available in codebehind]</myTagPrefix:Legend>
<myTagPrefix:Content>[controls here should be available in codebehind]</myTagPrefix:Content>
</myTagPrefix:Fieldset>
Или
<myTagPrefix:Fieldset>
<Legend>[controls here should be available in codebehind]</Legend>
<Content>[controls here should be available in codebehind]</Content>
</myTagPrefix:Fieldset>
Который более-менее генерирует следующий HTML-код (исключая магический сворачивающийся и поддерживающий состояние код):
<fieldset>
<legend>[result of rendered legend controls]</legend>
[result of rendered legend controls]
</fieldset>
Я посмотрел на шаблонный элемент управления, открывая контейнер шаблона через свойства, помеченные как 'TemplateContainer', и это хорошо работает, за исключением того факта, что код не может больше обращаться к элементам управления в шаблоне.
Я также изучил наследование элемента управления типа контейнера и переопределил методы рендеринга для тега начала и конца, что также хорошо, за исключением того, что он может содержать только одну коллекцию элементов управления, в то время как этот элемент управления fieldset должен иметь два (элементы управления в легенде и элементы управления в остальном наборе полей). Этого можно преодолеть, выставив текст легенды как свойство набора полей, но, чтобы не усложнять ситуацию, текст - не единственное, что должно отображаться в легенде. (например: изображения и кнопки могут отображаться тоже).
Конечно, этот вопрос можно рассматривать более абстрактно, я в основном спрашиваю контейнерный элемент управления с несколькими дочерними коллекциями.
Когда я попытался выяснить, с чем это сравнить, функциональность приблизилась к MultiView ; MultiView может содержать только элементы управления типа ' View ', а элементы управления View доступны в выделенном коде. Тот факт, что MultiView не ограничивает количество и уникальность его дочерних элементов управления, и мой элемент управления должен (максимум одна легенда и один элемент содержимого) - это то, с чем я мог бы жить ... пока;)
Кто-нибудь имеет представление о том, как был построен MultiView? Есть ли уловка, которую я пропускаю? Буду признателен за любую помощь или предложение.