Cómo capturar Ctrl+Tab y Ctrl+Shift+Tab en WPF?
tabs key-bindings (5)
¿Cuál sería un código de muestra que atrapará Ctrl + Tab y Ctrl + Shift + Tab para una aplicación WPF?
KeyDown
eventos KeyDown
y también intentamos agregar enlaces de comando con gestos de entrada, pero nunca pudimos atrapar estos dos accesos directos.
¿Qué controlador KeyDown tenías? El siguiente código funciona para mí. El que me da problemas es: Alt + Tab , pero no me lo preguntaste: D
public Window1()
{
InitializeComponent();
AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)HandleKeyDownEvent);
}
private void HandleKeyDownEvent(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab && (Keyboard.Modifiers & (ModifierKeys.Control | ModifierKeys.Shift)) == (ModifierKeys.Control | ModifierKeys.Shift))
{
MessageBox.Show("CTRL + SHIFT + TAB trapped");
}
if (e.Key == Key.Tab && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
MessageBox.Show("CTRL + TAB trapped");
}
}
Hola, puedes usar esto en el evento de keydown
private void OnButtonKeyDown(object sender, KeyEventArgs e)
{
if(Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.Tab) && Keyboard.IsKeyDown(Key.LeftShift))
{
//
// TODO: somthing here
//
}
}
La respuesta de Gustavo fue exactamente lo que estaba buscando. Queremos validar las teclas de entrada, pero aún así permitir el pegado:
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
if ((e.Key == Key.V || e.Key == Key.X || e.Key == Key.C) && Keyboard.IsKeyDown(Key.LeftCtrl))
return;
}
Tienes que usar el evento KeyUp
, no KeyDown
...
Versión de trabajo de la respuesta de Szymon Rozga (lo siento, no puedo comentar). No miramos a Alt, pero la contabilidad se puede agregar simplemente al principio si
public View()
{
InitializeComponent();
AddHandler(Keyboard.PreviewKeyDownEvent, (KeyEventHandler)controlKeyDownEvent);
}
private void controlKeyDownEvent(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab && Keyboard.Modifiers.HasFlag(ModifierKeys.Control))
{
if (Keyboard.Modifiers.HasFlag(ModifierKeys.Shift))
MessageBox.Show("CTRL + SHIFT + TAB trapped");
else
MessageBox.Show("CTRL + TAB trapped");
}
}