Прежде всего позвольте мне сказать, что ваш вопрос не дает понять, что вы не хотите использовать существующий UIElement.GotFocusEvent, но я предполагаю, что вы знаете об этом и имеете свои причины не использовать его.
Вы всегда можете зарегистрировать настраиваемое событие в статическом классе и поднять его туда, где хотите. Keyboard class делает со всеми своими событиями (например, 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));
}
Спасибо. Извините, да, правильное предположение о UIElement.GotFocusEvent. – MJS 2008-11-10 20:22:00