WPF-Anwendung, die Breite Erfassung von key up/down-events

Ich versuche zu erfassen keypress-Ereignisse überall in meiner WPF-Anwendung, unabhängig davon, welches UI-element den Fokus hat. Derzeit bin ich mit kein Glück. Kann jemand empfehlen einige Strategien, die ich nicht versucht haben? Oder, im Idealfall, eine Antwort wie "oh, dass ist leicht, Sie genau dies tun".

Es ist eine verteilte Anwendung, die einen chat-system. Der Effekt, den ich Suche, ist, dass der Benutzer mit der Eingabe beginnen eine chat-Nachricht jederzeit, ohne den Wechsel zu einem standard-chat-box. Ich werde Ihre Nachricht in der Anwendung selbst, mit FormattedText-Objekte. Dies ist wichtig, weil es bedeutet, es gibt keine text-input-Elemente in der Anwendung und überall.

Meiner XAML-Struktur sieht in etwa wie:

<MainWindow>
  <Canvas 1>
    <Canvas 2>
      <Image 1 />
    </Canvas 2>
    <Image 2 />
  </Canvas 1>
</MainWindow>

Ich Programmgesteuertes hinzufügen von Elementen in Canvas 2, und zu manipulieren, Bild 2, die ist, warum es ist, die Struktur.

Ich habe versucht, indem KeyDown, KeyUp und die Vorschau von Veranstaltungen zu MainWindow und Leinwand 1, aber keiner von Ihnen scheinen, um das Feuer (ich überprüfen Sie mit Haltepunkten). Ich habe auch nach dem Lesen eine weitere damit zusammenhängende Frage ist hier, versucht manuell festlegen des Fokus auf das main-Fenster in die Loaded () - Methode.

Ich weiß, es sind viele Fragen auf dieser Website, aber Sie haben mir nicht geholfen, weil:

  • es gibt keine Antworten (wird meine Frage beantwortet werden?)
  • übernehmen Sie eine text-Eingabe-widget und sind daran interessiert, sprudeln Ereignisse
  • Sie möchten eine Tastenbelegung für eine kleine Anzahl von Tasten - ich würde gerne erfassen alle Schlüssel
  • Sie daran interessiert sind, erkennen, wenn ein control/shift/alt-Taste gedrückt, nachdem Sie bereits gefangen die Veranstaltung

Vielen Dank für die Zeit nehmen, zu Lesen, mein langatmige post, und danke für die Anregungen.

Update (Nach Rachel ' s Kommentar), Wenn ich in ein Textfeld, und legen Sie den Fokus auf das Textfeld, ein Schlüssel-Ereignis-Methode in der MainWindow-Ebene ausgelöst wird. So, das funktioniert wie angepriesen.

Allerdings, möchte ich wirklich nicht haben eine explizite Eingabe von text-widget in der Anwendung überhaupt. Ich möchte die Benutzer in der Lage sein zu fangen Sie einfach eine Nachricht.

InformationsquelleAutor cursa | 2010-12-03
Schreibe einen Kommentar