2009-03-31 21 views
7

Estoy trabajando en una aplicación WPF, usando C# .net Quiero saber, ¿hay alguna manera de deshabilitar Retroceso del botón en una página xaml en particular. Quiero evitar que el usuario use el botón Retroceso en esta página xaml en particular. Incluso si el usuario presiona el botón Backspace, no debería tener ningún efecto.Deshabilitar el retroceso en wpf

Gracias

Respuesta

6

Tendrá que coger el evento y onKeyDown conjunto manejado en true para la tecla de retroceso.

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

si se refería a la navegación, a continuación, la situación podría ser un poco más complejo, ya que es probable que tenga a manejar Alt + Izquierda y algunos botones del mouse también. – Joey

+2

Esto realmente debería manejar el evento PreviewKeyDown; de lo contrario, si otro control tiene foco (como TextBox), la pulsación de la tecla no será interceptada. Como no ha dicho por qué quiere deshabilitar la tecla de retroceso, tal vez quiera soportarlo en los controles de entrada. –

+0

Hola Abe, funcionó el evento PreviewKeyDown. Muchas gracias. –

21

Si desea evitar que la tecla de retroceso que se remonta hasta el historial de navegación en un marco WPF, incluyendo "Back" botones de hardware especiales, usar:

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

¿A dónde va esto en el código? En App.xaml.cs o algo así? – Brendan

+1

Ok, lo resolvió: ponga esto en el constructor 'NavigationWindow'. – Brendan

0

Así que prefirieron el approach by sipwiz porque no lo hice quiero deshabilitar todos los atajos de teclado (aún quiero usar ALT-Left, etc., pero no el Retroceso).

Para mí, utilizando WPF NavigationWindow, la anulación del método OnKeyDown no funcionó en absoluto, la ventana aún navegaba hacia atrás cuando presioné la tecla Retroceso. Sobrescribir el OnPreviewKeyDown parece funcionar para empezar, pero luego me encontré con problemas cuando necesitaba la tecla Retroceso para trabajar con cuadros de texto.

Así que tomó lo que aprendí de la approach by Ed Andersen y yo añadido el siguiente código a mi NavigationWindow constructor:

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); 
} 
Cuestiones relacionadas