2009-12-15 11 views
5

¿Cómo se eliminarían todas las entradas hacia adelante en un servicio de navegación?¿Quitar la entrada hacia adelante en el servicio de navegación?

Intenté esto pero está fallando.

while (NavigationService.CanGoForward) NavigationService.RemoveBackEntry(); 

que sé "RemoveBackEntry()" Parece extraño, pero no existe un método RemoveForwardEntry().

¿Alguna idea?

Gracias, Kohan

Edición 1: Im un poco más cerca, puedo acceder a la pila hacia adelante, e incluso salida de cada elemento de allí, pero me parece que no puede encontrar la manera de eliminar las entradas . Ninguna de las propiedades o métodos en _frame.ForwardStack o j dan alguna idea sobre cómo eliminar estas entradas.

 Window mainWindow = Application.Current.MainWindow; 
     Frame _frame = (Frame)mainWindow.FindName("mainFrame"); 
     foreach (JournalEntry j in _frame.ForwardStack) 
     { 
      MessageBox.Show(j.Name); 
     } 

Respuesta

0

Leo un poco más en la navegación de wpf y si puede acceder a la instancia de NavigationWindow para su aplicación, hay una propiedad llamada ForwardStack que contiene la lista de páginas de navegación hacia adelante. Debería poder agregar o quitar páginas de allí.

No he probado esto por mi cuenta ya que no tengo un proyecto para probar esto ahora, así que avíseme si esto funciona, ya que me gustaría probarlo yo mismo en el futuro.

ver enlace de MSDN para el listado miembro de pleno derecho: http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationwindow_members.aspx

+0

Avanzó un poco, pero no exactamente, ver Edición 1. ¿Alguna idea? – 4imble

+3

Las pilas hacia adelante y hacia atrás son de solo lectura. ¿Cómo se pueden eliminar las páginas? – Eddie

0

Si renavigate a la página actual después de ir hacia atrás debe perder todos los datos hacia adelante al igual que lo haría en un navegador web o en Windows Explorer.

Si no desea que la actualización aparezca en la lista posterior, puede eliminar la última entrada de la lista de atrás.

+0

que hice es de extrañar que, yo no quiero que haya una entrada posterior añadido para la página actual. Supongo que la mejor manera es probarlo. – 4imble

+0

Tengo problemas con esta solución, no puedo cargar la página actual, solo puedo cargar una nueva instancia de esta página, pero luego me preocupa que se agregue a la pila de diarios. – 4imble

2

Bueno, nunca es demasiado tarde para una respuesta!

El siguiente fragmento de código sólo tiene que desactivar la navegación hacia adelante:

void Frame_Navigating(object sender, NavigatingCancelEventArgs e) 
    { 
     bool b = e.NavigationMode == NavigationMode.Forward; 
     if (b) 
     { 

      e.Cancel = true; 
     } 
    } 

Actualmente es para el evento Frame.Navigating pero debe solicitar Application, así como NavigationWindow (no probar sin embargo).

EDIT:

Aquí es una Behavior para un Frame:

public class FrameNavigationBehavior : Behavior<Frame> 
{ 
    public static readonly DependencyProperty CanGoForwardProperty = DependencyProperty.Register(
     "CanGoForward", typeof (bool), typeof (FrameNavigationBehavior), new PropertyMetadata(true)); 

    public static readonly DependencyProperty CanGoBackwardProperty = DependencyProperty.Register(
     "CanGoBackward", typeof (bool), typeof (FrameNavigationBehavior), new PropertyMetadata(true)); 

    public static readonly DependencyProperty CanRefreshProperty = DependencyProperty.Register(
     "CanRefresh", typeof (bool), typeof (FrameNavigationBehavior), new PropertyMetadata(true)); 

    public bool CanGoForward 
    { 
     get { return (bool) GetValue(CanGoForwardProperty); } 
     set { SetValue(CanGoForwardProperty, value); } 
    } 

    public bool CanGoBackward 
    { 
     get { return (bool) GetValue(CanGoBackwardProperty); } 
     set { SetValue(CanGoBackwardProperty, value); } 
    } 

    public bool CanRefresh 
    { 
     get { return (bool) GetValue(CanRefreshProperty); } 
     set { SetValue(CanRefreshProperty, value); } 
    } 

    protected override void OnAttached() 
    { 
     base.OnAttached(); 
     AssociatedObject.Navigating += AssociatedObject_Navigating; 
    } 

    protected override void OnDetaching() 
    { 
     base.OnDetaching(); 
     AssociatedObject.Navigating -= AssociatedObject_Navigating; 
    } 

    private void AssociatedObject_Navigating(object sender, NavigatingCancelEventArgs e) 
    { 
     NavigationMode navigationMode = e.NavigationMode; 
     switch (navigationMode) 
     { 
      case NavigationMode.New: 
       break; 
      case NavigationMode.Back: 
       if (!CanGoBackward) 
       { 
        e.Cancel = true; 
       } 
       break; 
      case NavigationMode.Forward: 
       if (!CanGoForward) 
       { 
        e.Cancel = true; 
       } 
       break; 
      case NavigationMode.Refresh: 
       if (!CanRefresh) 
       { 
        e.Cancel = true; 
       } 
       break; 
      default: 
       throw new ArgumentOutOfRangeException(); 
     } 
    } 
} 
+1

No creo que eso lo saque de la pila, por lo que no se borrará ni nada. –

Cuestiones relacionadas