2011-06-16 13 views

Respuesta

2

El cuadro en sí no proporciona ningún método para deshabilitar la navegación. Solo proporciona un medio para ocultar los controles de navegación. Sin embargo, puedes heredar de la clase Frame y hacer algunas modificaciones tú mismo. El siguiente ejemplo elimina la última página de BackStack cada vez que navega la página. De este modo, se asegura que el marco nunca pueda navegar hacia atrás, ya que no sabe qué página fue la última.

class NoNavFrame : Frame 
{ 
    public NoNavFrame() 
    { 
     this.Navigated += new System.Windows.Navigation.NavigatedEventHandler(NoNavFrame_Navigated); 
    } 

    void NoNavFrame_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) 
    { 
     this.NavigationService.RemoveBackEntry(); 
    } 
} 

A continuación, puede incluir esto en XAML de la siguiente manera ...

<myControls:NoNavFrame x:Name="myFrame" NavigationUIVisibility="Hidden" /> 
0

Lo que hago es alojar el contenido en ContentControl.

14

hay una solución más elegante donde los comportamientos vinculados se pueden utilizar para deshabilitar la navegación sin ampliar realmente un marco.

crear un comportamiento adjunto:

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Navigation; 

namespace A 
{ 
    public static class DisableNavigation 
    { 
     public static bool GetDisable(DependencyObject o) 
     { 
      return (bool)o.GetValue(DisableProperty); 
     } 
     public static void SetDisable(DependencyObject o, bool value) 
     { 
      o.SetValue(DisableProperty, value); 
     } 

     public static readonly DependencyProperty DisableProperty = 
      DependencyProperty.RegisterAttached("Disable", typeof(bool), typeof(DisableNavigation), 
               new PropertyMetadata(false, DisableChanged)); 



     public static void DisableChanged(object sender, DependencyPropertyChangedEventArgs e) 
     { 
      var frame = (Frame)sender; 
         frame.Navigated += DontNavigate; 
      frame.NavigationUIVisibility = NavigationUIVisibility.Hidden; 
     } 

     public static void DontNavigate(object sender, NavigationEventArgs e) 
     { 
      ((Frame)sender).NavigationService.RemoveBackEntry(); 
     } 
    } 
} 

Y en el xaml añadir esto cada vez que se utiliza un marco:

<Frame beha:DisableNavigation.Disable="True" /> 

y en la parte superior de la xaml añadir la importación:

xmlns:beha="clr-namespace:A" 
+0

No podría desactivar el audio, pero tal vez más adelante .. –

+0

funcionó perfectamente. gracias :) – ihebiheb

2

Consulte esta respuesta para saber cómo deshabilitar los atajos de teclado:

Disable backspace in wpf

Eso no funciona para los botones del mouse de navegación hacia atrás y hacia adelante. Para evitar eso, parece que necesita colocar un controlador en el evento Navegación y cancelarlo si no lo desea.

Por ejemplo, para desactivar totalmente la navegación hacia delante:

En .xaml:

<Frame Navigating="HandleNavigating" /> 

En código detrás:

void HandleNavigating(Object sender, NavigatingCancelEventArgs e) 
    { 
     if (e.NavigationMode == NavigationMode.Forward) 
     { 
      e.Cancel = true; 
     } 
    } 
+0

Este simple trabajo de soldadura funciona para mí. Pero también agrega un código para deshabilitar la navegación hacia atrás: if (e.NavigationMode == NavigationMode.Back) { e.Cancel = true; } –

Cuestiones relacionadas