2013-10-18 169 views
0

在我的Windows Phone 8應用程序中,我正在瀏覽頁面。說WP8確定頁面導航歷史

MainPage一些用戶控制點擊) - >第1頁然後用一個按鍵就帶我到主頁再次

MainPage一些用戶對照組B點擊) - >第2頁,然後用按鍵來頁面再次等來3頁第4頁

這裏我想確定從哪個頁面加載主頁面?

第1頁第2頁或基於我想根據導航歷史加載用戶控件3頁

我在庫中找不到任何內置屬性或函數。

任何幫助,我正在尋找最佳實踐以及實現這樣的功能。

+0

您可以有一個全局變量。在導航到主頁面之前,您需要使用pagename更改其值。 – Anand

+0

沒有內置的功能,直接給出哪個是您導航的最後一頁? – sunder

+0

請閱讀編輯,如果你能舉一個例子,那將會很棒。 – sunder

回答

0
+0

請再次閱讀修改。 – sunder

+0

@sunder通過使用返回堆棧,您可以獲得前一頁。你還需要什麼? – Jermay

+0

我不需要以前的頁面。我需要從哪個頁面返回堆棧。假設我從主頁的用戶控制點擊事件導航到page2。那麼在這種情況下,我從第2頁回來。希望你現在明白這個問題? – sunder

0

您可以創建一個

enum PageType 
{ 
    NONE, 
    PAGE_1, 
    PAGE_2, 
    PAGE_3, 
    PAGE_4 
} 

然後在你的MainPage你可以有一個伊娃作爲

private PageType pageType = PageType.NONE; 

然後,當你移動至 一個頁面,您可以將它設置

pageType = PageType.PAGE_!; 
NavigationService.Navigate(new Uri("Page1.xaml", UriKind.Relative)); 

,當你回來MainPage那麼你可以有這個

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 

    if (e.NavigationMode == NavigationMode.Back) 
    { 
     switch (pageType) 
     { 
      case PageType.NONE: 
       //Your code 
       break; 
      case PageType.PAGE_1: 
       //Your code 
       break; 
      case PageType.PAGE_2: 
       //Your code 
       break; 
      case PageType.PAGE_3: 
       //Your code 
       break; 
      case PageType.PAGE_4: 
       //Your code 
       break; 
     } 
    } 
} 

編輯

然後,您可以使用導航上下文。

在用戶控件

NavigationService.Navigate(new Uri("Page1.xaml?PAGE_TYPE=Page1", UriKind.Relative)); 

在你的MainPage

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 

    if (e.NavigationMode == NavigationMode.Back) 
    { 
     String pageType = null; 
     NavigationContext.QueryString.TryGetValue("PAGE_TYPE", out pageType); 
     if (pageType == "Page1") 
     { 
      //Your code 
     } 
    } 
} 
+0

這將是非常容易的,但我不是直接從主頁面導航,我從主頁面上的用戶控件導航,我加載不同的頁面。我會在頁面導航時創建一個事件,但我在應用程序中有很多用戶控件。 – sunder

+0

@sunder我編輯了我的答案。我不確定當從頁面返回時NavigationContext是否保留了值。請嘗試這個,如果它的工作,那麼好,如果不是,那麼在一個'Singleton'類中使用上面的解決方案。 –

0

讓哈希表全球。

Hashtable ht = new Hashtable(); 
ht.Add("page1"); 
NavigationService.Navigate(new Uri("Page1.xaml", UriKind.Relative)); 
0

看來,NavigationService不包含您所需要的信息,以及在NavigatingCancelEventArgs參數與OnNavigatingFrom到來。

因此,不幸的是,似乎沒有內建功能可滿足您的需求。

但是,您可以做的是堅持您的用戶已經過去的最後一頁(處理邏輯刪除場景)。例如,它可以在AppSettings的,這裏是一個僞代碼:

public class WhateverYouWantLastPagePersister 
{ 
    private const string LastPageID = "LastPage"; 

    public string GetLastPage() 
    { 
     string lastPage = string.Empty; 
     IsolatedStorageSettings.ApplicationSettings.TryGetValue<string>(LastPageID, out lastPage); 
     return lastPage; 
    } 

    public void PersistLastPage(string lastPage) 
    { 
     IsolatedStorageSettings.ApplicationSettings[LastPageID] = lastPage; 
    } 
} 

要堅持「自動」您上次訪問的頁面,你可以從的PhoneApplicationPage派生並重寫OnNavigatingFrom創建你自己的基本頁面:

public class BasePage : PhoneApplicationPage 
    { 
     protected override void OnNavigatedFrom(NavigationEventArgs e) 
     { 
      base.OnNavigatedFrom(e); 
      Uri currentUri = ((App)Application.Current).RootFrame.CurrentSource; 
      WhateverYouWantLastPagePersister.PersistLastPage(CustomMethodToExtractPageNameFromUri(currentUri)); 
     } 
    } 

所有頁面需要堅持在上次訪問的網頁必須從它派生的(所以第一頁,第二頁...)

最後,你可以使用WhateverYouWantLastPagePersister.GetLastPage()得到你所需要的。

當然,這些僞代碼示例:

  • 末頁可以是您想要的任何類型的(字符串,枚舉,int和就這麼 ......),你只需要從適當的自定義轉換器串到任何你想要的
  • CustomMethodToExtractPageNameFromUri是一個簡單的字符串解析器
  • WhateverYouWantLastPagePersister可以是靜態類,一個單身,與DI框架注入,這是給你!
0

如果您必須知道您來自哪個頁面,則可以使用PhoneApplicationService.Current.State。在您的二級頁面,覆蓋OnBackKeyPress並在的MainPage設置的值

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) 
{ 
    base.OnBackKeyPress(e); 
    PhoneApplicationService.Current.State["LastPage"] = this; 
} 

然後,你會覆蓋的OnNavigatedTo並檢查狀態

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    object lastPage; 
    if((e.NavigationMode == NavigationMode.Back) && 
     (PhoneApplicationService.Current.State.TryGetValue("LastPage", out lastPage))) 
    { 
     // we navigated back and we know what the last page was! 
     var pageName = lastPage.GetType().Name; 
     if (pageName == "Page1") 
     { 
      // do something! 
     } 
    } 
} 
0

的值就傳遞參數,當你瀏覽回主頁面,也許枚舉類型包含'page1''page2'...