2009-03-31 10 views
7

Ich arbeite in einer WPF-Anwendung mit C# .net Ich möchte wissen, gibt es eine Möglichkeit, Backspace Schaltfläche auf einer bestimmten XAML-Seite zu deaktivieren. Ich möchte verhindern, dass Benutzer die Backspace Schaltfläche auf dieser bestimmten XAML-Seite verwenden. Selbst wenn der Benutzer die Taste Backspace drückt, sollte keine Wirkung auftreten.Deaktivieren der Rücktaste in WPF

Dank

Antwort

6

Sie finden das onKeyDown Ereignis und Satz gehandhabt gilt für Backspace fangen müssen.

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

Wenn er Navigation gemeint, dann könnte sich die Situation etwas komplexer sein, als Sie wahrscheinlich zu handle Alt + Links und einige Maustasten. – Joey

+2

Dies sollte eigentlich das PreviewKeyDown-Ereignis behandeln, andernfalls wird der Tastendruck nicht abgefangen, wenn ein anderes Steuerelement den Fokus hat (wie TextBox). Da er nicht gesagt hat, warum er den Rückschritt-Schlüssel deaktivieren möchte, möchte er vielleicht in den Eingangskontrollen unterstützen. –

+0

Hey Abe, es hat PreviewKeyDown Veranstaltung funktioniert. Vielen Dank. –

21

Wenn Sie Backspace verhindern wollen wieder den Navigationsverlauf in einem WPF-Rahmen gehen, einschließlich spezielle "Back" Hardware-Tasten verwenden:

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

Wohin geht das im Code? In App.xaml.cs oder etwas? – Brendan

+1

Ok, habe es herausgefunden - setze das in den 'NavigationWindow' Konstruktor. – Brendan

0

So ich die approach by sipwiz bevorzugt, weil ich es nicht täte Ich möchte alle Tastenkombinationen deaktivieren (ich möchte immer noch ALT-Left usw. verwenden, nur nicht die Rücktaste).

Für mich mit einem WPF NavigationWindow, Überschreiben der OnKeyDown Methode überhaupt nicht funktioniert, das Fenster immer noch zurück navigiert, wenn ich die Rücktaste gedrückt habe. Das Überschreiben der OnPreviewKeyDown schien am Anfang zu funktionieren, aber dann stieß ich auf Probleme, wenn ich die Rücktaste brauchte, um mit Textfeldern zu arbeiten. So

Ich habe, was ich aus dem approach by Ed Andersen gelernt und ich fügte den folgenden Code zu meinem Navigation Konstruktor:

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