Вам нужно направить события от ваших детей к вашему верхнему элементу.
В коде вашего верхнего элемента определите нужные вам RoutedEvent
. Затем в конструкторе подпишитесь на необходимые дочерние события, а в обработчики добавьте новое событие верхнего элемента, соответствующее вашему обработанному дочернему событию, с такими же аргументами.
Пример
Примечание: ищите пользовательские перенаправленные события в Google. В этом примере вам все еще нужно скопировать аргументы события кнопки (если они вам нужны, чтобы получить доступ к текущему состоянию кнопки и т. Д.) В рекламируемое событие.
public class MyCustomControl : UserControl {
// Custom routed event
public static readonly RoutedEvent ButtonClickEvent = EventManager.RegisterRoutedEvent(
"ButtonClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyCustomControl));
// Custom CLR event associated to the routed event
public event RoutedEventHandler ButtonClick {
add { AddHandler(ButtonClickEvent, value); }
remove { RemoveHandler(ButtonClickEvent, value); }
}
// Constructor. Subscribe to the event and route it !
public MyCustomControl() {
theButton.Click += (s, e) => {
RaiseButtonClickEvent(e);
};
}
// Router for the button click event
private void RaiseButtonClickEvent(RoutedEventArgs args) {
// you need to find a way to copy args to newArgs (I never tried to do this, google it)
RoutedEventArgs newArgs = new RoutedEventArgs(MyCustomControl.ButtonClickEvent);
RaiseEvent(newArgs);
}
}