2011-03-21 4 views
4

Windows Phone 7에서는 이동 한 페이지에서 뒤로가 눌러 졌는지 알 수있는 방법이 있습니까? 나는 현재 페이지에서 가로 챌 수 있지만 내가 탐색 할 페이지에서 알 필요가 있다는 것을 안다. 즉, 2 페이지가 page1 및 page2라고 말하면, page2에서 뒤로 버튼이 눌러집니다. page1에서 뒤로 버튼이 눌려 졌는지 여부를 알아야합니다. page1에있는 뒤로 버튼 누르기에서 몇 가지 물건을 실행해야합니다.WP7은 "navigated to"페이지에서 뒤로 키를 눌렀을 때를 알고 있습니다.

답변

5

이것은 일종의 해킹이지만 다음을 수행 할 수 있습니다. 모든 페이지에서 OnBackkeyPress 이벤트를 무시하십시오. 모든 페이지에 대한 OnNavigatedTo 이벤트 처리기에서, 다음

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

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

슬프게도 나는 이렇게 할 방법이 없다고 생각합니다. 당신이 다음 OnNavigatedTo에 대해 이야기 얻을 이벤트 인수 당신에게 그 정보를 제공하지 않는 경우, http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigatingcanceleventargs.navigationmode(v=vs.95) 그러나

- 당신이 OnNavigatingFrom에 대해 말했다받을

다음 이벤트 인수는 NavigationMode이 포함되어 있습니다.

가장 쉬운 해결 방법은 NavigationService.Navigating에 대한 처리기를 App 클래스에 추가하는 것일 수 있습니다. 거기에 NavigationMode를 캐시 할 수 있습니다. 그러나 코드가 어떤 순서로 도착하는지에 대한 문제가있을 수 있으므로 철저하게 테스트하십시오. 사용자가 전화 홈페이지 또는 다른 앱에서 페이지로 다시 이동할 때이 코드가 올바르게 호출되는지 여부는 문제가 될 수 있습니다.

NavigationService.Navigating에 대한 좋은 설명이 http://wildermuth.com/2010/10/11/Architecting_WP7_-_Part_1_of_10_Navigation_Framework

0

정확히 같은 문제가 있습니다. 대답을 볼 수 있습니다 here

데이터를 이미로드 한 페이지로 다시 이동하는 경우 데이터를 다시로드하지 않으려했습니다. 결국 데이터를 이미로드했는지 확인하기 위해 플래그를 사용해야했습니다.

0

언제든지 App 클래스 (App.xaml.cs)에 bool 변수를 정의 할 수 있습니다. 가 PAGE1 Page1.xaml에서 앱 클래스

public bool backVariable=false;

에 다음과 같은 방법

에 의해 모든 페이지에서 액세스 할 수 있습니다.CS 세계적으로 또는 방법

App thisApp=Application.Current as App;

의는 다음 U이 실제로 허용 대답보다 더

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에서 도입 되었습니까? –

+0

답을 쉽게 읽을 수 있도록 코드 블록에 답을 넣을 수도 있습니다. 하지만 편집 할 수는 없습니다. –

+2

이 NavigationMode는 NavigationService.GoBack()이 호출 될 때도 true입니다. 하드웨어 프레스 만 원하면 대답을 사용하십시오. – ShawnFeatherly

관련 문제