2010-06-20 7 views
5

Ich habe eine WPF-Anwendung, wo ich benutzerdefinierte Befehle definiert haben, die die wichtigsten Gesten Strg + und Ctrl +. Mein Fenster hat eine TextBox und ScrollViewer und wenn die TextBox hat Ctrl + und Ctrl Fokus + bewegen Sie den Cursor an den Anfang des nächsten oder vorherigen Wort, was in Ordnung ist.Make Scroll nicht die Kontrolle erfassen links und rechts Kontrolle in WPF

Aber auf der ScrollViewer macht es die Bewegung horizontale Scroll, als ob ich gerade gedrückt hatte ← oder . Was ist der einfachste Weg, um dem Ctrl + und Ctrl + Ereignisse zu sprudeln aus meinem ScrollViewer zum Fenster, wo die Command definiert zu ermöglichen?

Antwort

4

Also habe ich diese Arbeit durch die folgenden

public class MyScrollViewer : ScrollViewer 
{ 
    protected override void OnKeyDown(KeyEventArgs e) 
    { 
     if (e.KeyboardDevice.Modifiers == ModifierKeys.Control) 
     { 
      if (e.Key == Key.Left || e.Key == Key.Right) 
       return; 
     } 
     base.OnKeyDown(e); 
    } 
} 

Ich denke dabei der Trick, dass die Veranstaltung an der Spitze beginnt und es ist Weg nach unten funktioniert, zu verstehen ist. Dann auf dem Weg zurück nach oben jeder "Schicht" überprüft die Handled boolean und wenn es nicht auf wahr gesetzt ist, wird es feststellen, ob es etwas tun und setzen Sie es, wenn es tut. Ich musste dieses Verhalten für meine Shortcuts kurzschließen, so dass Handled immer noch falsch wäre, wenn es zurück zur Fenster-Ebene gelandet wäre.

+0

Perfekt. Vielen Dank! +1 –

3

Sie müssen außer Kraft setzen ScrollViewer ‚s PreviewKeyDown Ereignis und setzen e.Handled = true und geben den Fall an Eltern so etwas wie (this.Parent as FrameworkElement).RaiseEvent(e); zu verwenden, wenn die gedrückten Tasten eines der Tastenkombination waren Sie auf Ihre Befehle zugeordnet.

+0

Dies ist die richtige Antwort für Scroll-Viewer (in WPF). Das OnKeyDown-Ereignis wird nicht auf den Pfeiltasten ausgelöst, aber das tut. Vielen Dank! –

Verwandte Themen