Часть серии элементов управления, над которыми я работаю, очевидно, включает в себя объединение некоторых из них в композиты. Я быстро начинаю понимать, что это необходимо учитывать (это все для меня ново!):)
У меня в основном есть StyledWindow
элемент управления, который по сути является прославленным Panel
с возможностью делать другие биты (например, добавлять границы и т. Д.).
Вот код, который создает дочерние элементы управления внутри него. До этого момента, похоже, он работал корректно с обычными статическими элементами управления:
protected override void CreateChildControls()
{
_panel = new Panel();
if (_editable != null)
_editable.InstantiateIn(_panel);
_regions = new List<IAttributeAccessor>();
_regions.Add(_panel);
}
Проблемы возникли сегодня, когда я попытался вложить в них более сложный элемент управления. Этот элемент управления использует ссылку на страницу, поскольку он внедряет JavaScript, чтобы сделать ее более быстрой и отзывчивой (RegisterClientScriptBlock
- единственная причина, по которой мне нужна ссылка на страницу).
Теперь это приводило к ошибкам "объект ноль", но я локализовал это до метода рендеринга, который, конечно, пытался вызвать метод для объекта [нуль] Page
.
Что меня смущает, так это то, что элемент управления отлично работает как автономный, но при установке в StyledWindow
все идет ужасно неправильно!
Итак, похоже, я что-то упустил в своих StyledWindow
или ChildControl
. Есть идеи?
Обновление
Как правильно заметил Брэд Уилсон , вы не видите элементы управления, добавляемые в коллекцию Controls
. Это то, для чего _panel
, это было для меня, в основном тогда переопределить Controls
(я получил это от гида где-то):
Panel _panel; // Sub-Control to store the "Content".
public override ControlCollection Controls
{
get
{
EnsureChildControls();
return _panel.Controls;
}
}
Надеюсь, это поможет прояснить ситуацию. Извинения.
Правильно, я немного поиграл с элементом управления, поместив один в композит, а другой снаружи. Затем я получил статус Page на главном событии события в жизненном цикле элемента управления и отобразил его на странице.
Автономный сервер работает нормально, и страница запускается, как и ожидалось. Однако тот, который вложен в Composite, отличается. Это событие OnLoad
вообще не запускается! Поэтому я предполагаю, что Брэд, вероятно, прав в том, что я неправильно настраиваю иерархию управления. Может ли кто-нибудь дать совет относительно того, чего мне не хватает? Метод Панели не достаточно? (ну, это явно не так ?!): D
Спасибо за вашу помощь, ребята, оценили:)