2009-12-15 14 views
5

Come si rimuovono tutte le voci in avanti in un servizio di navigazione?Rimuovere la voce in avanti sul servizio di navigazione?

Ho provato questo ma si blocca.

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

lo so "RemoveBackEntry()" sembra strano, ma non esiste un metodo RemoveForwardEntry().

Qualche idea?

Grazie, Kohan

Edit 1: Im un po 'più vicino, posso accedere alla pila in avanti, e anche l'uscita di ogni elemento in lì, ma io non riesco a capire come rimuovere le voci . Nessuna proprietà o metodo su _frame.ForwardStack o j fornisce informazioni su come rimuovere queste voci.

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

risposta

0

Ho letto un po 'di più nella navigazione wpf e se è possibile accedere all'istanza di NavigationWindow per l'applicazione, c'è una proprietà chiamata ForwardStack che contiene l'elenco delle pagine di navigazione avanzate. Dovresti essere in grado di aggiungere o rimuovere pagine da lì.

Non l'ho provato da solo perché non ho un progetto per testarlo subito, quindi fatemi sapere se questo funziona come mi piacerebbe provare questo in futuro.

vedi link MSDN per lista completa membro: http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationwindow_members.aspx

+0

Fatto un piccolo progresso ma non proprio lì, vedi Modifica 1. Qualche idea? – 4imble

+3

Le pile di andata e ritorno sono di sola lettura. Come possono essere rimosse le pagine? – Eddie

0

Se renavigate alla pagina corrente dopo si va a ritroso si dovrebbe perdere tutti i dati in avanti proprio come si farebbe in un browser Web o in Windows Explorer.

Se non si desidera visualizzare l'aggiornamento nell'elenco posteriore, è possibile rimuovere l'ultima voce dall'elenco posteriore.

+0

Mi chiedo che, non volevo che ci sia una voce di nuovo aggiunto per la pagina corrente. Immagino che il modo migliore sia provarlo. – 4imble

+0

Ho problemi con questa soluzione, non riesco a caricare la pagina corrente, posso solo caricare una nuova istanza di questa pagina, ma poi mi preoccupo che venga aggiunta allo stack del journal. – 4imble

2

Beh, non è mai troppo tardi per una risposta!

Il seguente pezzo di codice semplicemente disattivare la navigazione in avanti:

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

      e.Cancel = true; 
     } 
    } 

Attualmente è per l'evento Frame.Navigating ma dovrebbe applicare per Application così come NavigationWindow (non prova però).

EDIT:

Ecco un Behavior per 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

Non penso che lo toglierà dalla pila, però, quindi non cancellerà nulla. –

Problemi correlati