Согласитесь с другими постерами, это можно сделать только вручную. Однако можно аккуратно свернуть код, чтобы реализовать его только один раз.
Чтобы справиться с этим в недавнем проекте, я создал вспомогательный класс MouseManager. У MouseManager были такие методы:
void Subscribe(IPublisWpfEvents publisher, ISinkMouseEvents target);
void Subscribe(IPublishWinformsEvents publisher, ISinkMouseEvents target)
void Unsubscribe(IPublisWpfEvents publisher);
void Unsubscribe(IPublishWinformsEvents publisher);
Для пользовательских контролей WPF я бы реализовал IPublishWpfEvents, а для пользовательских контролей Winforms я бы реализовал IPublisWinFormsEvents. Два интерфейса будут иметь точные подписи для событий встроенной мыши, поэтому никакой имплементации на самом деле не нужно, просто прикрепите интерфейс к своему пользовательскому контролю и все.
Наконец, MouseManager связывает события между издателями (двух разных типов) и подписчиками (одного типа). Мне пришлось создать свои собственные унифицированные MouseArgs, которые имели свои собственные перечисления, такие как MouseButton и класс MousePoint.
Приятным побочным продуктом этого стало то, что у меня теперь есть интерфейсы для обработки всех моих событий мыши, то есть я могу выполнять модульный тест публикации и обработки событий, используя RhinoMocks или аналогичные.
Надеюсь, это поможет,