В GridMenu (который, как я полагаю, является другим настраиваемым элементом управления), выставьте событие ButtonClick, объявив его открытым:
public event EventHandler ButtonClick;
Если хотите, вы можете создать собственный обработчик событий, определив делегат и пользовательский класс аргумента события. Где-то в логике этого элемента управления вам нужно будет инициировать событие (возможно, в обработчиках событий Clicked кнопок, содержащихся в GridMenu; события могут каскадироваться). При написании кода на C # вам нужно проверить, что событие не равно нулю (имеется в виду, по крайней мере, один обработчик подключен), прежде чем вызывать событие.
Теперь это событие видно для TheGrid, который содержит ваше GridMenu. Теперь вам нужно создать «сквозной» канал, чтобы пользователи TheGrid могли присоединять обработчики, не зная о GridMenu. Это можно сделать, указав в TheGrid событие, напоминающее свойство, а также присоединяющее и отсоединяющее обработчики от внутреннего события:
public event EventHandler GridMenuButtonClick
{
add{ GridMenu.ButtonClick += value;}
remove { GridMenu.ButtonClick -= value;}
}
Из разметки элемента управления, содержащего элемент управления TheGrid, теперь вы можете указать обработчик события, прикрепив его к OnGridMenuButtonClicked так, как вам нужно.