2010-08-30 6 views
5

Ok, ich bin mir nicht sicher, ob ich verstehe, wie das funktionieren soll, aber in meiner App habe ich eine Tastengeste (Strg + K) an einen RoutedCommand gebunden. Egal, wo ich mich in meiner App konzentriere, die Tastenkombination funktioniert, außer wenn ich sie in einem WindowsFormsHost mit einem Webbrowser-Steuerelement verwende. Ich habe versucht, das PreviewKeyDown-Ereignis für das Webbrowser-Steuerelement zu erfassen und den IsInputKey auf false zu setzen. Dies sollte in der Theorie dazu führen, dass der Host die Schlüsselbewegung unbehandelt betrachtet und nach oben sendet, aber das passiert nicht.WPF WindowsFormsHost blubbert keine unbehandelten Tastengesten

UPDATE:

Wenn ich die Bool IsInputKey Kontrolle außer Kraft setzen (Keys keyData) und return false, es funktioniert und der Befehl wird ausgeführt, wie es sollte.

Vielleicht ist etwas falsch in der Art, wie ich mit PreviewKeyDown verfahren habe?

Ich erwartete, dass dies ermöglicht mir, jede Tastenkombination aus meinem Hauptfenster zu erfassen. Ich würde das lieber mit Ereignisbehandlung als das Erweitern eines Steuerelements beheben ...

Antwort

0

Wenn ich es richtig verstehe, möchten Sie verhindern, dass der Tastenanschlag vom gehosteten Winform gehandhabt wird. Ihr Beispielcode zeigt jedoch an, dass Sie versuchen, es in dem gehosteten Steuerelement zu behandeln.

Zum Behandeln von Tunnelereignissen sollten Sie besser "außerhalb" des gehosteten Steuerelements im WPF-Visual Tree arbeiten. Sie können - zum Beispiel - es handhaben wie folgt:

<Grid PreviewKeyDown="Grid_PreviewKeyDown" PreviewMouseDown="Grid_PreviewMouseDown" Height="250" Width="250"> 
    <WindowsFormsHost Name="windowsFormsHost1"> 
     <wf:Form1 TopLevel="False" /> 
    </WindowsFormsHost> 
</Grid> 

Durch das Ereignis Einstellung wie wie folgt behandelt, verhindert es, dass die Veranstaltung weiter unten in der visuellen Struktur ausbreitet:

private void Grid_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    e.Handled = true; 
} 
Verwandte Themen