Ich habe nach Beschreibungen von Ereignissen "Preview ******" gesucht, da jedes Element Ereignisse wie KeyDown und PreviewKeyDown enthält. Was ist der Unterschied (nicht, dass man an ein Ereignis gebunden ist und man nicht, der echte konventionelle Unterschied und der Unterschied in der Programmierweise)?
In jeder von Control abgeleiteten Klasse können Sie beide Methoden überschreiben. OnKeyDown und OnPreviewKeyDown, jetzt schreibe ich mein benutzerdefiniertes Steuerelement. Welche Methode soll ich verwenden? Und was ist der Unterschied zwischen beiden?
Ich fand diesen Blogeintrag wirklich nützlich, um den Unterschied zu beschreiben:
http://joshsmithonwpf.wordpress.com/2007/06/22/overview-of-routed-events-in-wpf/
Sie haben den visuellen Baum. Wenn ein Ereignis für ein Element im Baum auftritt, wandert zuerst ein Vorschauereignis vom Stamm zum Element (Tunneling): Das PreviewKeyDown-Ereignis wird für alle diese Elemente ausgelöst und dann ein "normales" Ereignis. Das Ereignis wandert vom Element zur Wurzel (Sprudeln).
quelle
Grundsätzlich ist es das gleiche Ereignis, das jedoch unmittelbar vor dem Hauptereignis stattfindet. Sie sind vorhanden, sodass Sie auf diese Arten von Ereignissen warten können, ohne das normale Verhalten des Steuerelements zu beeinträchtigen, wenn diese Ereignisse auftreten.
Zum Beispiel tun Schaltflächen Dinge, wenn Sie klicken oder die Maustaste drücken usw. Wenn Sie diese Ereignisse selbst behandeln, müssen Sie sicherstellen, dass Sie dieselben Dinge tun, sonst verhält sich Ihre Schaltfläche nicht gleich. Mit den Vorschau-Ereignissen erhalten Sie ein Ereignis in derselben Zeitleiste, ohne sich um die Beeinträchtigung der vorhandenen Funktionen kümmern zu müssen.
Dies ist besonders nützlich, wenn Sie mit benutzerdefinierten Stilen / Triggern / Steuerelementvorlagen arbeiten. Wenn Sie anfangen, das Erscheinungsbild / Verhalten der Steuerung zu überschreiben.
Führen Sie in Ihrem Steuerelement die Hauptarbeit aus, die Sie im OnKeyDown-Ereignis wünschen, und überlassen Sie das Vorschauereignis einer anderen Person. So arbeite ich mit ihnen.
quelle
Dieser Unterschied hat mit gerouteten Ereignissen zu tun. So implementiert WPF seine Ereignisbehandlungsstrategie. Der Standardereignisname (z. B. KeyDown usw.) impliziert eine sprudelnde Routing-Strategie. Diejenigen, denen "Preview" vorangestellt ist (dh PreviewKeyDown usw.), implizieren eine Tunneling-Routing-Strategie. Weitere Informationen zu diesen Strategien finden Sie hier . Wenn ein Ereignis in WPF aufgerufen wird, wandert es zunächst vom obersten Element im visuellen Baum zu dem Element, das das Ereignis aufgerufen hat, und kehrt schließlich nach oben zurück. Auf dem Weg den Baum hinunter stoßen Sie auf das PreviewKeyDown-Ereignis und auf der Rückreise auf das KeyDown-Ereignis in dieser Reihenfolge.
quelle