2014-05-24 23 views
6

Io navigo tra le pagine con la classe Navigation Helper che VS 2013 ha aggiunto quando la soluzione è stata creata, ma lo stato di scorrimento maggior parte dei controlli (Come Pivot, Hub) non viene salvato come in Windows Phone 8.x Silverlight.Salvare lo stato di scorrimento in Windows Phone 8.1 quando l'utente naviga tra le pagine

Cosa devo fare per implementare questo comportamento? Devo gestire lo stato di scorrimento da solo e ripristinare lo scorrimento quando torno nella pagina visitata?

Grazie.

Update1:

ho bisogno di salvare l'elemento di rotazione/hub selezionato etc, quando tornerò alla pagina.

UPDATE2:

void navigationHelper_SaveState(obj sender,SaveStateEventArgs e) 
    { 
    e.PageState["SelectedSection"] = MainHub.SectionsInView; 
    } 
    void navigationHelper_LoadState(obj sender,LoadStateEventArgs e)   
    { 
     if (e.PageState != null) 
     { 
      var sections = e.PageState["SelectedSection"] as IList<HubSection>; 
      if (sections != null && sections.Any()) 
       MainHub.ScrollToSection(sections[0]); 
     } 
    } 
+0

Cosa intendi per scorrimento? L'elemento perno o hub selezionato o la posizione di scrollviewer degli elementi all'interno di pivot o hub? –

+0

Elemento pivot/hub selezionato. –

+0

Se si crea un nuovo tipo di Pivot di progetto Windows Phone 8.1 ed eseguito così com'è, si noterà che mantiene lo stato dell'elemento di rotazione selezionato quando si passa dalla pagina pivot alla pagina dell'oggetto e viceversa. –

risposta

12

Nella pagina in cui si utilizza l'hub, impostare la modalità di cache di navigazione nel costruttore:

this.NavigationCacheMode = NavigationCacheMode.Enabled; 

o in XAML:

<Page 
    x:Class="App.HubPage" 
    .... 
    xmlns:data="using:App.Data" 
    NavigationCacheMode="Enabled" 
    .... 
+1

Si salva la mia giornata, grazie :) –

+0

Non so perché questo non è un comportamento predefinito (specialmente sulle pagine hub). Sono contento di averlo trovato prima di salvare/caricare lo stato tramite NavigationHelper come avevo programmato. – SimpsOff

+0

prova la sospensione e in questo modo è inutile – LXG

1

Migliore utilizzo:

this.NavigationCacheMode = NavigationCacheMode.Required; 

prima:

this.InitializeComponent(); 

E aggiungere:

protected override void OnNavigatedFrom(NavigationEventArgs e) 
{ 
    if (e.NavigationMode == NavigationMode.Back) 
    this.NavigationCacheMode = NavigationCacheMode.Disabled; 
} 

per rimuovere cache di navigazione di ritorno da pagina.

+0

Questo è in realtà un trucco abbastanza intelligente. Imo molto meglio della domanda principale. Molte grazie! –