2011-03-21 52 views
4

在Windows Phone 7的按下WP7知道,有沒有辦法,如果在真實導航頁面按下回知道嗎?我知道我們可以在當前頁面中攔截,但是我需要在我正在導航的頁面中知道。即如果有兩頁說第一頁和第二頁,則在第二頁按下後退按鈕。我需要知道是否在第一頁按下了後退按鈕。我需要在第1頁上的後退按鈕上運行一些內容。當返回鍵在「導航到」

回答

5

這是一種黑客,但你可以做到以下幾點;在每個頁面上覆蓋OnBackkeyPress事件。在事件處理程序中添加以下代碼:

PhoneApplicationService.Current.State["isbacknav"] = true; 

然後,在OnNavigatedTo事件處理程序的每一頁,檢查State字典是否包含該條目。

bool isbacknav = false; 
if(PhoneApplicationService.Current.State.ContainsKey("isbacknav")) { 
    isbacknav = (bool)PhoneApplicationService.Current.State["isbacknav"]; 

    PhoneApplicationService.Current.State["isbacknav"] = false; 
    // or 
    // PhoneApplicationService.Current.State.Remove("isbacknav"); 
} 
0

在每個頁面,您可以覆蓋OnBackKeyPress事件來檢測返回鍵被按下。

在這第二頁,你可以設置一個全局標誌或發送郵件到第一頁。
頁面無法知道打開/顯示的最後一頁是什麼。你會讓你自己。

0

可悲的是我不認爲有內置的方式來做到這一點。

,當你告訴OnNavigatingFrom那麼事件參數包括NavigationMode - http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigatingcanceleventargs.navigationmode(v=vs.95

然而,當你被告知的OnNavigatedTo那麼事件參數不給你這些信息。

我認爲最簡單的解決方法可能是在你的App類添加一個處理NavigationService.Navigating - 你可以緩存NavigationMode那裏。然而,全面測試這是有可能是什麼代碼獲取的問題,什麼樣的順序 - 再加上有可能與是否當用戶從手機的主頁或從其他應用程序導航回您的網頁此代碼是正確調用問題

有一個很好的解釋NavigationService.Navigatinghttp://wildermuth.com/2010/10/11/Architecting_WP7_-_Part_1_of_10_Navigation_Framework

0

我有完全相同的問題。你可以看到答案here

我不想重新加載數據,如果我導航回到我已加載數據的頁面。最後,我不得不使用標誌來確定我是否已經加載數據。

0

您可以隨時在App類(App.xaml.cs)中定義一個bool變量/ s。 它們可以由任何頁面通過以下方法

在App類

public bool backVariable=false;

在第1頁的Page1.xaml訪問。CS 全局或以任何方法

App thisApp=Application.Current as App;

那麼在哪裏使用

thisApp.backVariable

25
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    if (e.NavigationMode == System.Windows.Navigation.NavigationMode.Back) 
    ... 
} 
+0

這實際上比公認的答案更好地訪問布爾變量。這是在Windows Phone 7.0中可用還是在7.1/Mango中引入? – 2012-02-15 18:14:10

+0

此外,您可能希望將答案放在代碼塊中,以便閱讀。我想但我不能編輯它。 – 2012-02-15 18:23:40

+2

當NavigationService.GoBack()被調用時,這個NavigationMode也是true。如果你只想要硬件按下使用接受的答案。 – ShawnFeatherly 2012-08-01 21:06:05