Wir haben eine WinForms-Anwendung, die wir nach und nach in WPF konvertieren. An dieser Stelle ist das Hauptformular der Anwendung ein Formular (WinForm), das eine vertikale Seitenleiste enthält, die in WPF erstellt wird. Die Sidebar wird in einem ElementHost-Steuerelement gehostet.
Im Hauptformular ist KeyPreview auf "true" gesetzt und wir überschreiben OnKeyDown (), um anwendungsweite Tastenkombinationen zu verarbeiten. Wenn die Seitenleiste den Fokus hat, werden Tastaturereignisse nicht an OnKeyDown gesendet.
Was ist der richtige Weg, um das zu beheben?
Ja, es scheint, dass die KeyPreview von ElementHost nicht berücksichtigt wird, hier ist eine Umgehungslösung:
Von ElementHost ableiten und ProcessCmdKey überschreiben, wenn das base.ProcessCmdKey-Ergebnis "not processed" lautet, die Nachricht an das übergeordnete Element weiterleiten, auch wenn es nicht Ihr Hauptformular ist. Auf diese Weise erhält Ihr Hauptformular es, weil andere winforms-Steuerelement dies tut sich richtig verhalten. Hier ist ein Beispiel ...
%Vor%Sorry für die Nicht-Antwort, ich habe nicht genug Rep zu kommentieren. Ich denke, dass Sie vielleicht besser ein WPF-Fenster als Root haben und wenn möglich den Winforms-Inhalt hosten sollten. Ich weiß, dass es dieses Problem beheben wird und Ihre andere , aber es kann neue Probleme einführen.
Tags und Links wpf winforms winforms-interop