В общем, я бы избегал этого типа зависимости.Это значительно снижает полезность и гибкость вашего UserControl.
Вместо этого, возможно, было бы лучше вставить зависимость в UserControl во время построения (или даже во время выполнения).Вы можете передать делегат, ссылающийся на MyRoutine
, или интерфейс, который реализует главная страница.
Таким образом, зависимость UserControl будет очевидна (так как это часть API), и ее можно будет использоватьэто с другими приложениями / страницами позже.
При этом, если вы решите сохранить вышеизложенное, я бы внес как минимум одно изменение.Вместо того, чтобы ожидать, что родительский родитель всегда будет «MainWindow», я бы рекурсивно проверял родителей, пока вы не дойдете до MainWindow (или ничего) в методе вашего класса.Это, как минимум, позволит вам гибко перемещать свой UserControl по иерархии, не нарушая его.