Прежде всего позвольте мне сказать, что ваш вопрос не проясняет, что вы не хотите использовать существующее UIElement.GotFocusEvent , но я предполагаю, что вы знаете об этом и у вас есть причины не использую его.
Вы всегда можете зарегистрировать пользовательское событие в статическом классе и вызывать его в любом месте. Класс Keyboard работает со всеми своими событиями (например, Keyboard.KeyDownEvent ).
public static class RoutedEventUtility
{
public static readonly RoutedEvent MyCustomEvent = EventManager.RegisterRoutedEvent("MyCustomEvent", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(RoutedEventUtility));
}
Вы вызываете событие так же, как и любое другое RoutedEvent.
RoutedEventArgs args = new RoutedEventArgs(RoutedEventUtility.MyCustomEvent);
RaiseEvent(args);
Если вы хотите, чтобы другой класс владел событием в качестве открытого поля, вам нужно будет добавить владельца.
public class MyCustomControl : Control
{
public static readonly RoutedEvent MyCustomEvent = RoutedEventUtility.MyCustomEvent.AddOwner(typeof(MyCustomControl));
}