2010-06-20 12 views
5

Ho un'applicazione WPF dove ho definito comandi personalizzati che utilizzano i gesti fondamentali Ctrl + e Ctrl +. La mia finestra ha un TextBox e un ScrollViewer e quando il TextBox è attiva Ctrl + e Ctrl + spostare il cursore all'inizio della parola successiva o precedente, che va bene.Fai ScrollViewer non cattura il controllo a sinistra ea destra di controllo in WPF

Ma d'ScrollViewer rende il movimento di scorrimento orizzontale come se avessi premuto appena o . Qual è il modo più semplice per consentire al Ctrl + e Ctrl + eventi a ribollire dalla mia ScrollViewer alla finestra in cui è definito il Command?

risposta

4

Così ho preso questo lavoro nel modo seguente

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); 
    } 
} 

Credo che il trucco è quello di capire che l'evento inizia nella parte superiore e lavora la sua strada verso il basso. Quindi, durante il backup di ogni "livello", controlla il booleano gestito e, se non è impostato su true, determinerà se farà qualcosa e lo imposterà se lo fa. Avevo bisogno di cortocircuitare questo comportamento per le mie scorciatoie in modo che Handled fosse ancora falso quando è tornato al livello di finestra.

+0

Perfetto. Grazie! +1 –

3

Devi eseguire l'override PreviewKeyDown evento ScrollViewer s' e impostare e.Handled = true e trasmettere l'evento per genitore utilizzando qualcosa di simile (this.Parent as FrameworkElement).RaiseEvent(e); se i tasti premuti sono stati uno dei la combinazione di tasti che avete assegnato ai comandi.

+0

Questa è la risposta corretta per Scroll Viewer (in WPF). L'evento OnKeyDown non si attiva sui tasti di direzione, ma ciò avviene. Grazie! –

Problemi correlati