2009-03-31 6 views
7

Je travaille dans une application WPF, en utilisant C# .net Je veux savoir, est-il possible de désactiver le bouton Backspace sur une page xaml particulière. Je souhaite empêcher l'utilisateur d'utiliser le bouton Backspace sur cette page xaml particulière. Même si l'utilisateur appuie sur le bouton Backspace, aucun effet ne doit avoir lieu.Désactiver retour arrière dans wpf

Merci

Répondre

6

Vous devez attraper l'événement onKeyDown et ensemble traité true pour backspace.

private void Window_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Back) 
    { 
     e.Handled = true; 
    } 
} 
+1

S'il voulait dire la navigation, la situation est peut-être un peu plus complexe, comme vous avez probablement manipulez Alt + Left et quelques boutons de la souris. – Joey

+2

Cela devrait en fait gérer l'événement PreviewKeyDown, sinon si un autre contrôle a le focus (comme TextBox), la touche ne sera pas interceptée. Comme il n'a pas dit pourquoi il veut désactiver la touche de retour arrière, peut-être qu'il veut le soutenir dans les contrôles d'entrée. –

+0

Hey Abe, cela a fonctionné événement PreviewKeyDown. Merci beaucoup. –

21

Si vous voulez éviter backspace remonter l'histoire de la navigation dans un cadre WPF, y compris les boutons matériels spéciaux « Retour », utilisez:

NavigationCommands.BrowseBack.InputGestures.Clear(); 
NavigationCommands.BrowseForward.InputGestures.Clear(); 
+0

Où cela rentre dans le code? Dans App.xaml.cs ou quelque chose? – Brendan

+1

Ok l'a compris - mettez ceci dans le constructeur 'NavigationWindow'. – Brendan

0

Je préfère le approach by sipwiz parce que je ne l'ai pas vouloir désactiver tous les raccourcis clavier (je veux toujours utiliser ALT-Gauche etc juste pas l'espace arrière). Pour moi en utilisant un WPF NavigationWindow, en remplaçant la méthode OnKeyDown ne fonctionnait pas du tout, la fenêtre naviguait encore en arrière quand j'ai appuyé sur la touche Retour arrière. Surcharger le OnPreviewKeyDown a semblé fonctionner au début, mais j'ai ensuite rencontré des problèmes lorsque j'avais besoin de la touche Backspace pour travailler avec des zones de texte.

Je pris ce que j'appris de la approach by Ed Andersen et j'ajouté le code suivant à mon constructeur NavigationWindow:

KeyGesture backKeyGesture = null; 
foreach(var gesture in NavigationCommands.BrowseBack.InputGestures) 
{ 
    KeyGesture keyGesture = gesture as KeyGesture; 
    if((keyGesture != null) && 
     (keyGesture.Key == Key.Back) && 
     (keyGesture.Modifiers == ModifierKeys.None)) 
    { 
     backKeyGesture = keyGesture; 
    } 
} 

if (backKeyGesture != null) 
{ 
    NavigationCommands.BrowseBack.InputGestures.Remove(backKeyGesture); 
} 
Questions connexes