Überprüfen, ob ein RoutedEvent Handler hat

Ich habe eine benutzerdefinierte Button-Klasse, die beim Klicken immer die gleiche Aktion ausführt (Öffnen eines bestimmten Fensters). Ich füge ein Click-Ereignis hinzu, das in der XAML der Schaltfläche wie eine normale Schaltfläche zugewiesen werden kann.

Wenn darauf geklickt wird, möchte ich den Click-Ereignishandler ausführen, falls einer zugewiesen wurde. Andernfalls möchte ich die Standardaktion ausführen. Das Problem ist, dass es anscheinend keine Möglichkeit gibt, zu überprüfen, ob einem Ereignis Handler hinzugefügt wurden.

Ich dachte, eine Nullprüfung des Ereignisses würde es tun:

if (Click == null) 
{ 
    DefaultClickAction(); 
} 
else 
{ 
    RaiseEvent(new RoutedEventArgs(ClickEvent, this));;
}

... aber das kompiliert nicht. Der Compiler sagt mir, dass ich nichts anderes als + = oder - = für ein Ereignis außerhalb der definierenden Klasse tun kann, obwohl ich diese Prüfung INNERHALB der definierenden Klasse durchführen möchte.

Ich habe das richtige Verhalten selbst implementiert, aber es ist hässlich und ausführlich und ich kann nicht glauben, dass es keine eingebaute Möglichkeit gibt, dies zu tun. Ich muss etwas vermissen.

Hier ist der relevante Code:

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; }
    }

    //...
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage