2011-08-18 6 views
3

현재 출시 된 WP7 버전에서는 페이지 스택을 프로그래밍 방식으로 제어 할 수 없습니다.뒤로 버튼을 눌렀을 때 페이지 건너 뛰기

A에서 시작하여 B로 이동 한 다음 C.B가 새 항목에 대한 데이터 입력 페이지이므로 CI에서 다시 돌아와 논리적으로 A에 착륙합니다. 현재 C에서 오는 B에서 탐색을 수신합니다. A를 다른 페이지로 강제로 되돌립니다. 그러나 페이지가 화면에 표시되지 않도록 이벤트가 곧 발생하지는 않습니다.

은 A -> B -> C

C ->를

A는 최상위리스트 페이지이다. B가 새 항목 페이지입니다. C는 항목 세부 정보 페이지입니다.

이것은 한 가지 양식에서만 발생하므로 건너 뛰고 싶은 페이지에서 OnNavigatedTo을 재정의하고 프로그래밍 방식으로 "돌아 가기"를 호출하는 것이 좋습니다. 그러나이 작업은 페이지를 잠시 표시 한 다음 즉시 페이지를 탐색하는 바람직하지 않은 영향을줍니다.

  • 깜박임을 중지 할 수있는 효과적인 방법이 있습니까?
  • 내 대안 대신 이동을 포함하여 페이지 탐색을 완전히 제어해야합니까? 이렇게하면 페이지 스택이 이상한 상태가되지만 모든 탐색을 제어하면 사용자가 볼 수 없게됩니다.

페이지 스택에서 프로그래밍 방식으로 페이지를 팝업하는 새로운 기능이 있다는 것을 알고 있지만 출시 된 버전에서 문제가 해결되었는지 알고 싶습니다.

또 다른 동기는 어떤 버전이 가장 적합할지, 최신 버전인지 아니면 앱에 충분한 버전인지 모릅니다. 당분간은 라이브 버전을 고수하고 있습니다.

답변

3

건너 뛰기 기간 동안 루트 프레임을 투명하게 만들어서 깜박임을 중지했습니다. 이 예제는 제 코드에서 직접적으로 나온 것이 아닙니다. 둘째

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    // If I've come from page C, go back again. 
    NavigationService.GoBack(); 
} 

: 첫째로 당신은 당신이에서 온 곳을보고, 건너 OnNavigatedTo 및 테스트를 대체하고자하는 페이지

(이 내 코드는 특정 얻는 곳이다, 나는 내가 어디를 추적) , 기본 App.xaml.마지막으로

RootFrame.Navigating += RootFrame_Navigating; 

프레임을 숨기고 스킵 기간 동안 다시 보여주기 위해 구체화 : CS는 Navigating에 대한 이벤트 처리기를 (내가 public App() 생성자에 넣어) 등록

private bool _skipped; 

    private void RootFrame_Navigated(object sender, NavigationEventArgs e) 
    { 
     RootFrame.Opacity = 100; 
     RootFrame.Navigated -= RootFrame_Navigated; 
    } 

    private void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e) 
    { 
     if (_skipped) 
     { 
      _skipped = false; 
      RootFrame.Navigated += RootFrame_Navigated; 
     } 

     if (e.NavigationMode == NavigationMode.Back && 
      e.Uri.OriginalString.Contains("ThePage.xaml")) 
     { 
      RootFrame.Opacity = 0; 
      _skipped = true; 
     } 
    } 

페이지를 투명하게 만들 때를 결정하는 코드도 실제 코드와 다르지만 그림에 대한 대답에 구현을 추가했습니다. 이것은 다른 답변에서 링크 된 레서피의 코드와 거의 동일하지만 타사 DLL을 사용할 필요가 없습니다.

이전에 다른 답변에서 제공된 소스를 보았으나 루트 프레임을 숨기기위한 코드에는 관심을 두지 않았기 때문에 직접 대답을 제공했습니다. 나는 비선형 네비게이션 서비스를 사용하지 않고, 프레임 투명성을위한 코드 조각만을 사용하고있다. (나는 원형 탐색을 탐지 할 필요가 없다. 왜냐하면 내가 디자인에서 선택한 것들을 잘 알고 있고 스스로 찾을 수 있기 때문이다. -)

돌아갈 때 의미가없는 페이지를 건너 뛸 필요가있는 (현재) 한 가지 경우에는이 방법으로 해결할 수 있습니다. 망고가 나오면 최신 버전을 대상으로하는 것이 가장 좋을 것이라고 생각하고 싶습니다. 따라서이 코드는 곧 없어집니다.

출처 : 어떻게 그렇게

+0

+1 - 답변을 주셔서 감사합니다. – keyboardP

1

이미 알고있는 깜박임을 제외하고는 망고 이전에는 할 방법이 없습니다.

망고에서는 NavigationService.RemoveBackEntry을 사용할 수 있습니다.

다른 애플리케이션보다 나쁜 애플리케이션 디자인에 대한 질문이 많습니다. 무엇이든 즉각적인 페이지가 필요하지 않아야합니다.

해결 방법은 즉각적인 페이지가 필요없는 응용 프로그램 구조를 디자인하는 것입니다.

+0

? 페이지 A는 내 홈 페이지이고, 사용자는 "새 항목"을 클릭하고, B는 새 항목 페이지이며, 해당 항목의 목록 페이지 C로 이동합니다. 나쁜 디자인은 어디에 있습니까? 또한 지원 방법이 없다는 것을 이해합니다 (따라서 회피 방법에 대한 이야기). 그리고 망고 지원에 대해 알고 있습니다. –

+0

"즉각적인 페이지"란 무엇입니까? –

+0

그리고 왜 사용자가 "새 항목"페이지로 돌아가고 싶지 않습니까? 페이지 B가 생성/대화 상자와 같은 페이지 인 경우 생성 후 사용자를 '집'화면으로 되돌리고 목록 페이지로 리디렉션하지 않아야합니다. 사용자가 목록을보고 싶으면 홈 화면에 있거나 사용자가 직접 이동해야합니다. –

3

순환 탐색 문제를 해결하려면 this blog post을 읽고, 비선형 탐색을 보여주는 this recipe code을 다운로드 할 수 있습니다.

+0

이전에 사용 해본 적이 있습니까? 그것이 나타나는 것은 나를 위해 페이지를 다시 방문하는 것입니다. 이미 코드를 작성했습니다. 그것은 신속하게 뒷받침되는 페이지를 표시합니까? –

+0

RootFrame을 투명하게 보입니다. –

+0

아니요, 필자는 절대로 필요로하지는 않았지만, 당신이 묘사하고있는 시나리오에 대해 꽤 많이 제안 된 것을 보았습니다. – keyboardP

관련 문제