Вопрос

Как заставить два несвязанных элемента управления вызывать одно и то же пользовательское событие?Во всех примерах, которые я видел до сих пор, событие определено в одном элементе управления. Должен ли я использовать другой подход?

Например.Я хотел бы вызвать пользовательское событие всплывания из обработчика OnFocus для кнопки и текстового поля.

Это было полезно?

Решение

Прежде всего позвольте мне сказать, что ваш вопрос не дает понять, что вы не хотите использовать существующий UIElement.GotFocusEvent, но я предполагаю, что вы знаете об этом и у вас есть причины не использовать его.

Вы всегда можете зарегистрировать собственное событие в статическом классе и вызывать его где угодно.А Класс клавиатуры делает со всеми своими событиями (например. 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));
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top