Чтобы сделать каждый элемент управления повторно используемым и отделенным от других элементов управления, я всегда придерживался этого подхода: каждый контейнер будет знать о элементах управления, которые он содержит на один уровень глубиной, но не о контейнере, в котором он содержится. Чтобы общаться, вы правы в использовании событий. Это обеспечивает уровень абстракции и позволяет повторно использовать все элементы управления.
Как говорится, давайте посмотрим на ваш пример. Ваш TitleControl
ничего не содержит, поэтому все, что он будет делать, это запускать события.
Ваш HeaderControl
ссылается на ваш TitleControl
и обрабатывает его события. Если он не полностью обрабатывает ваши TitleControl
события, то должен объявить и запустить собственное событие , а также передать исходный отправитель и аргументы события.
На уровне вашей страницы ваша страница будет обрабатывать события HeaderControl
. Поскольку ваша страница также является контейнером для вашего TabsControl
, вызовите открытый метод в вашем TabsControl
внутри обработчика событий для вашего события HeaderControl
и передайте всплывающую информацию EventArg.
В основном, используйте события, чтобы накапливать вещи, и используйте открытые методы или свойства, чтобы оттолкнуть вещи.