2010-08-19 4 views
2

Windows Phone 7에서 응용 프로그램을 개발 중입니다. 따라서 방문 페이지가 사용자 정의 시작 화면 페이지 (예 : 스플래시 화면을 표시하는 기본 방법을 사용하지 않았습니다. .png 파일을 가지고 있습니다. 사용자 프로필을 기반으로 런타임에 스플래시 화면에 데이터를 추가해야합니다. 그래서 나는 스플래시 화면을 만들었습니다. 지연 (5 초) 후 메인 페이지로 이동합니다. 사용자가 기본적으로 휴대 전화의 뒤로 버튼을 누를 경우, 지금 윈도우의 뒤로 탐색에서 페이지를 건너 뛰는 방법 전화 번호

PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame; 
root.Navigate(new Uri("/MainPage.xaml", UriKind.Relative)); 

을 사용하면 시작 화면으로 이동,하지만 난 응용 프로그램을 종료합니다.

나는 어떻게 이것을 할 수있다. .

답변

4

비슷한 시나리오가 있으며 여기에 제가 사용했던 수정이 있습니다.

뒤로 탐색 할 때 건너 뛰고 싶었던 페이지의 경우, 페이지 내용을로드할지 또는 이전 페이지로 다시 이동 할지를 결정하는 bool 멤버 변수를 추가했습니다. 이 방법은 효과가 있지만 응용 프로그램에 악영향을 미치지는 않지만 더 나은 해결책이있을 수 있습니다. 더 나은 방법에 대한 제안을 환영합니다.

public partial class LoginPage : PhoneApplicationPage 
{ 
    private bool _navigateBack; 

    public LoginPage() 
    { 
     InitializeComponent(); 

     _navigateBack = false; 
    } 

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     if (_navigateBack) 
     { 
      this.NavigationService.GoBack(); 
     } 
     else 
     { 
      _navigateBack = true; 
      base.OnNavigatedTo(e); 
     } 
    } 
} 
0

이 솔루션은 앱을 종료하기 전에 스플래시 화면을 숨김으로써 더 깨끗한 이탈을 만듭니다. 이 코드를 사용하여 특정 페이지로 건너 뛰는 것을 건너 뜁니다.

1 단계 : 숨겨진

Visibility="Collapsed" 

3 단계에서 LayoutRoot의 설정 기본값 : jmason의 코드

2 단계를 추가 _navigateBack 플래그가 false 인 경우 OnNavigatedTo 이벤트에서에서 LayoutRoot를 보여줍니다. OnNavigatedFrom 이벤트에서에서 LayoutRoot를 다시 숨기

불행하게도
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     if (_navigateBack) 
     { 
      this.NavigationService.GoBack(); 
     } 
     else 
     { 
      LayoutRoot.Visibility = Visibility.Visible; 
      _navigateBack = true; 
      base.OnNavigatedTo(e); 
     } 
    } 
    protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     LayoutRoot.Visibility = Visibility.Collapsed; 
    } 
3

, 당신은에 this.NavigationService.GoBack();를 작성할 수 없습니다 의미 당신이 강제로 응용 프로그램을 종료 할 수 없습니다 때문에 윈도우 폰 8에서 작동하지 않습니다 jmason의 솔루션, 스플래시 화면. 더 나은 (그리고 작동하는) 솔루션은 스플래시 화면을 완료했을 때 탐색 스택을 청소하는 것입니다. 시작 화면 (일반적으로 메인 페이지) 후 페이지에서

:

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    // Calling the base class OnNavigatedTo method 
    base.OnNavigatedTo(e); 

    // Only clear the stack for 'new' (forward) and 'refresh' navigations 
    if (e.NavigationMode == NavigationMode.New || e.NavigationMode == NavigationMode.Refresh) 
     // For UI consistency, clear the entire page stack 
     while (this.NavigationService.RemoveBackEntry() != null) 
      // Do nothing 
      ; 
} 
+0

매력처럼 작동합니다! – christoph

0

아주 간단한 바로 시작 화면의 예 후 페이지에이를 추가하여 1 페이지

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     NavigationService.RemoveBackEntry(); 
    } 

여기에 당신에게 스플래시 화면으로 돌아 가기 항목을 제거하십시오. 다시 클릭하면 스플래시로 돌아 오는 대신 앱이 삭제됩니다. 해피 코딩.

관련 문제