У меня есть собственный класс Button, который всегда выполняет одно и то же действие при нажатии (открытие определенного окна). Я добавляю событие Click, которое может быть назначено в XAML кнопки, как обычная кнопка.
Когда его щелкают, я хочу выполнить обработчик события Click, если он был назначен, в противном случае я хочу выполнить действие по умолчанию. Проблема в том, что, по-видимому, нет способа проверить, были ли какие-либо обработчики добавлены к событию.
Я думал, что нулевая проверка на событии сделает это:
if (Click == null)
{
DefaultClickAction();
}
else
{
RaiseEvent(new RoutedEventArgs(ClickEvent, this));;
}
... но это не компилируется. Компилятор говорит мне, что я не могу сделать ничего, кроме + = или - =, для события вне определяющего класса, хотя я пытаюсь сделать эту проверку ВНУТРИ определяющего класса.
Я сам реализовал правильное поведение, но оно уродливо и многословно, и я не могу поверить, что нет встроенного способа сделать это. Я должен что-то упустить.
Вот соответствующий код:
public class MyButtonClass : Control
{
//...
public static readonly RoutedEvent ClickEvent =
EventManager.RegisterRoutedEvent("Click",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(MyButtonClass));
public event RoutedEventHandler Click
{
add { ClickHandlerCount++; AddHandler(ClickEvent, value); }
remove { ClickHandlerCount--; RemoveHandler(ClickEvent, value); }
}
private int ClickHandlerCount = 0;
private Boolean ClickHandlerExists
{
get { return ClickHandlerCount > 0; }
}
//...
}