Verificando se um RoutedEvent tem algum manipulador
Eu tenho uma classe Button personalizada, que sempre executa a mesma ação quando é clicada (abrindo uma janela específica). Estou adicionando um evento Click que pode ser atribuído no XAML do botão, como um botão normal.
Quando ele é clicado, desejo executar o manipulador de eventos Click, se um tiver sido atribuído, caso contrário, desejo executar a ação padrão. O problema é que aparentemente não há como verificar se algum manipulador foi adicionado a um evento.
Eu pensei que uma verificação nula no evento faria isso:
if (Click == null)
{
DefaultClickAction();
}
else
{
RaiseEvent(new RoutedEventArgs(ClickEvent, this));;
}
... mas isso não compila. O compilador me diz que não posso fazer nada além de + = ou - = em um evento fora da classe de definição, evento que estou tentando fazer isso, verifique DENTRO da classe de definição.
Eu mesmo implementei o comportamento correto, mas é feio e detalhado e não acredito que não haja uma maneira integrada de fazer isso. Eu devo estar esquecendo alguma coisa.
Aqui está o código relevante:
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; }
}
//...
}