2010-09-28 132 views
9

我在我的應用程序中有3頁。頁面#2導航回頁面#1並轉發到頁面#3。我怎樣才能做到這一點,所以從頁面#3返回導航會跳過頁面#2並直接轉到#1?如何從導航歷史記錄中刪除頁面?

+0

的Silverlight WP7 =創建 「加載」 事件。它會得到更少的意見與適當的標籤。 :) – 2014-06-10 22:39:31

回答

6

我最終結合了頁面#2和#3在一個頁面。當我需要第2頁時,我使用導航參數來啓動第2頁內容可見的頁面,當我完成第3頁時,我只是隱藏了#2內容。

編輯:在芒果,有一個NavigationService.RemoveBackEntry()函數,確切地做什麼需要。

+0

this.NavigationService對我來說總是「空」,你怎麼解決這個問題? – Jonny 2011-08-10 04:59:27

+0

@Jonny把它放在頁面加載的事件中 – EaterOfCode 2013-06-09 21:13:14

0

而非網頁#2特別導航頁#1考慮使用此代碼: -

NavigationService.GoBack(); 
4

有沒有辦法直接從網頁#3頁#1去,而無需通過網頁#2去。

然而,您可以在頁面#2中處理OnNavigatedTo,並且如果來自頁面#3,則發出另一個呼叫到NavigationService.GoBack()
喜歡的東西:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
{ 
    if (comingFromPage3) 
    { 
    NavigationService.GoBack(); 
    } 

    base.OnNavigatedTo(e); 
} 

有如果從3#頁面來,你可以跟蹤各種方式。我很想用一個全局變量來表示這一點(在第3頁中設置,並在第2頁中檢查)。
如果您決定使用簡單的跟蹤頁面導航到的次數(即第二次導航頁面時必須從#3返回),請注意頁面#2時發生的墓碑現象或者頁面#3被顯示。

+1

這有效,但頁面#2閃爍瞬間 - 我不高興。 – 2010-10-05 05:48:42

2

如果您正在使用硬件後退按鈕,那麼沒有沒有直接的方法來做到這一點。

您可以隨時使用導航方法直接進入第一頁。

NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.RelativeOrAbsolute)); 

這將讓你到第一頁,但它也會將第3頁添加到後退堆棧。

在WPF中,您始終可以使用RemoveBackEntry()方法從後端堆棧中清除項目,但不幸的是,它不適用於Silverlight中的手機。

1

我建議overiding後退按鈕按鍵直接在那裏你希望他們去用戶:

保護覆蓋無效OnBackKeyPress(System.ComponentModel.CancelEventArgs E) { NavigationService.Navigate(新的URI(」 /MainPage.xaml「,UriKind.Relative)); }

+0

這導致編寫你自己的導航;)一旦你應用了這種模式,你需要爲每個後退導航進行維護。 – 2011-07-13 17:44:38

0

你應該爲你的頁面

private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) 
    { 
     try { while (NavigationService.RemoveBackEntry() != null) ; } 
     catch (System.NullReferenceException ex) { } 
    } 
相關問題