2009-08-11 11 views
11

Por lo tanto, estoy usando un control de cuadrícula wpf en tercera parte que está codificado para aceptar solo ciertas teclas para realizar reacciones de acceso directo y una de ellas es Shift-Tab. Sin embargo, mi base de usuarios está acostumbrada a presionar las flechas hacia arriba y hacia abajo y decirles 'no' no es una opción en este momento. Así que mi única opción, creo, es interceptar la tecla de previsualización y enviar una combinación de pulsaciones de tecla diferente.WPF - Send Keys Redux

Ahora, estoy usando el siguiente código que he encontrado en aquí para enviar una pestaña cuando el usuario pulsa la flecha hacia abajo:

if (e.Key == Key.Down) 
{ 
    e.Handled = true; 
    KeyEventArgs eInsertBack = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Tab); 
    eInsertBack.RoutedEvent = UIElement.KeyDownEvent; 
    InputManager.Current.ProcessInput(eInsertBack); 
} 

Sin embargo, este método está limitado en que no parece ser capaz de simular una presión del botón Shift? WPF parece mirar los Keyboard.Modifiers para poder 'leer' un Shift o Ctrl, pero no parece haber ninguna posibilidad de establecer el Keyboard.Modifiers programáticamente. ¿Alguna ayuda por ahí?

Respuesta

0

I simular lo que dices bien utilizando el siguiente ¿no es esto lo que quieres decir?

public Window1() 
{ 
    InitializeComponent(); 


    Loaded += new RoutedEventHandler(Window1_Loaded); 
} 

void Window1_Loaded(object sender, RoutedEventArgs e) 
{ 
    WebBrowser1_PreviewKeyDown(this, new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 1, Key.LeftShift)); 
    WebBrowser1_PreviewKeyDown(this, new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 1, Key.Tab)); 
} 

private void WebBrowser1_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    System.Diagnostics.Debug.WriteLine(e.Key); 
} 

SALIDA:

LeftShift 
Tab 
+0

Gracias, pero no pienses que es esto. Lo que estoy buscando es una combinación de pulsaciones de teclas de Shift-Tab al mismo tiempo. – mmccurrey

+0

hmm ya veo. Es extraño porque usar Key.LeftShift | Key.Tab da como resultado CtrlLeft por alguna razón extraña pero probablemente buena. Tendré un poco más de investigación cuando pueda –

+5

@REA_ANDREW: Ves que esto sucede porque 'Llaves' no son banderas que se pueden combinar, es una enumeración donde' Key.LeftShift = 116' y 'Key.Tab = 3'. El resultado es 119 que se asigna a 'Key.RightCtrl = 119' (Presione F12 en Visual Studio cuando el cursor esté en' Key' para abrir la definición). –

1

intento esto

System.Windows.Forms.SendKeys.SendWait("{Tab}"); 

En la aplicación WPF, SendKeys.Send no funciona, pero SendWait funciona bien.