Quel serait un exemple de code qui va piéger le Ctrl+Tab et Ctrl+Shift+Tab pour une application WPF?
Nous avons créé des événements KeyDown
et avons également essayé d'ajouter des liaisons de commandes avec des gestes d'entrée, mais nous n'avons jamais pu intercepter ces deux raccourcis.
Quel gestionnaire KeyDown aviez-vous? Le code ci-dessous fonctionne pour moi. Celui qui me pose problème est: Alt + Tab, mais vous ne l'avez pas demandé: 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");
}
}
La réponse de Gustavo était exactement ce que je cherchais. Nous voulons valider les clés de saisie, mais autorisons toujours le collage:
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
if ((e.Key == Key.V || e.Key == Key.X || e.Key == Key.C) && Keyboard.IsKeyDown(Key.LeftCtrl))
return;
}
Vous devez utiliser KeyUp
événement, pas KeyDown
...
Version de travail de Szymon Rozga réponse (désolé, je ne peux pas commenter). Nous ne regardons pas sur Alt, mais sa comptabilité peut être simplement ajoutée au début 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");
}
}
Salut, vous pouvez l'utiliser lors de l'événement keydown
private void OnButtonKeyDown(object sender, KeyEventArgs e)
{
if(Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.Tab) && Keyboard.IsKeyDown(Key.LeftShift))
{
//
// TODO: somthing here
//
}
}