2010-06-20 7 views
5

Tengo una aplicación WPF donde he definido comandos personalizados que utilizan los gestos clave Ctrl + y Ctrl +. Mi ventana tiene una TextBox y una ScrollViewer y cuando el TextBox tiene el foco Ctrl + y Ctrl + mover el cursor al principio de la palabra siguiente o anterior, lo cual está bien.Hacer ScrollViewer no captura de control a la izquierda y la derecha en el control de WPF

Pero en el ScrollViewer que hace el movimiento de desplazamiento horizontal como si hubiera presionado simplemente o . ¿Cuál es la forma más fácil para que el Ctrl + y Ctrl + eventos a borbotones de mi ScrollViewer a la ventana donde se define el Command?

Respuesta

4

Así que tengo este trabajo haciendo lo siguiente

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

Creo que el truco es entender que el evento comienza en la parte superior y trabaja, es el camino hacia abajo. Luego, en el camino de regreso hacia arriba, cada "capa" verifica el booleano Manipulado y si no está configurado como verdadero, determinará si hará algo y lo configurará si lo hace. Necesitaba cortocircuitar este comportamiento para mis atajos para que Handled aún fuera falso cuando subía al nivel de la ventana.

+0

Perfecto. ¡Gracias! +1 –

3

debe invalidar PreviewKeyDown caso ScrollViewer 's y establecer e.Handled = true y transmitir el evento para los padres de usar algo como (this.Parent as FrameworkElement).RaiseEvent(e); si las teclas pulsadas eran una de la combinación de teclas que ha asignado a sus comandos.

+0

Esta es la respuesta correcta para el visor de desplazamiento (en WPF). El evento OnKeyDown no activa las teclas de flecha, pero sí. ¡Gracias! –

Cuestiones relacionadas