2014-03-07 2 views
0

을 무시하려고하고, 뒤로 버튼의 사용에 대한 많은 요구 사항이 있습니다. 뒤로 버튼을 단순히 백 스택으로 GoBack하는 것을 원하지 않기 때문에이 작업을 통해 기본 메뉴로 되돌아 갈 것이라는 경고 메시지 상자가 나타납니다.내가 윈도우 폰 8에 대한 간단한 응용 프로그램을 개발하기 위해 노력하고있어 NavigationMode.Back

문제는이 페이지는 몇 번을 다시로드해야하고, 다음 코드 정지 한 다시로드 후 제대로 작동이다. 메시지 상자가 여러 번 열립니다. 그리고 내가 다시로드할수록 더 많은 MessageBox가 나타납니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Navigation; 
using Microsoft.Phone.Controls; 
using Microsoft.Phone.Shell; 
using BackButtonTests.Resources; 

namespace BackButtonTests 
{ 
public partial class MainPage : PhoneApplicationPage 
{   
    public MainPage() 
    { 
     InitializeComponent();    
    } 

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(e); 
     NavigationService.Navigating += NavigationService_Navigating; 
    } 

    void NavigationService_Navigating(object sender, NavigatingCancelEventArgs e) 
    { 

     if (e.NavigationMode == NavigationMode.Back) 
     { 
      e.Cancel = true; 
      MessageBox.Show("Quit"); 
     } 
    } 

    private void Restart_Click(object sender, RoutedEventArgs e) 
    { 
     NavigationService.Navigate(new Uri("/MainPage.xaml?reload=" + DateTime.Now.ToString(), UriKind.RelativeOrAbsolute)); 
     //Use this fake reload query with unique value as a way to "deceive" the system, as windowsphone does not support NavigationService.Reload, and using simply the Uri of the same page will not properly load everything 
    } 

    private void Quit_Click(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show("Quit"); 
    } 
} 
} 

이것은 실제 프로젝트에서 겪고있는 문제를 정확하게 보여주는 테스트 코드 일뿐입니다. 물론 xaml에는 2 개의 버튼이 있습니다. 이 앞 페이지 (나의 실제 프로젝트에서 문제가) 때이 NavigatedTo 아니라 당신이 먼저 페이지를 다시로드 할 때까지

그리고 코드가 작동하지 않습니다.

제가 잘못하고있는 것에 대한 단서가 있습니까?

참고 : 나는 (예를 들어, OnBackKeyPress에) 이벤트 핸들러를 변화에 관심이 아니에요. 나는 내가 선택한 핸들러 (NavigationService.Navigating, NavigationMode.Back)를 어떻게 이해하는지 알고 싶다. 감사합니다

+0

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

+0

그 점에 대해 죄송합니다. – Inox

답변

1

void NavigationService_Navigating(object sender, NavigatingCancelEventArgs e) 
{ 
    NavigationService.Navigating -= NavigationService_Navigating; 
    if (e.NavigationMode == NavigationMode.Back) 
    { 
     e.Cancel = true; 
     MessageBox.Show("Quit"); 
    } 
} 

더 이상이 켜지지 스택의 모든 페이지에 해고되지 않는 경우를 의미합니다 귀하의 항해 이벤트 핸들러를 변경 퀘스트

을 명확히 추가 정보는 다음 업데이트

내비게이션 대신 OnBackKeypress 오버라이드

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) 
{ 
    var DoYouWantToQuit = MessageBox.Show("Are you sure you want to Quit", "Quit", MessageBoxButtons.OkCancel); 
    if (DoYouWantToQuit != MessageBoxButton.Ok) 
    { 
     e.Cancel = true 
    } 
    base.OnBackKeyPress(e); 
} 
+0

고마워요,하지만 그건 문제가 존재하지 않는 것 같습니다. OnBackKeyPress를 재정의했지만 더 많은 문제가 발생했습니다. 간단히 말해서, (Coding4Fun 툴킷의) 메시지 박스와 비슷한 객체의 일부는 BackButton에 리스너가 있으며, 툴킷 코드로 들어가서 해당 리스너를 제거하지 않고도 거의 불가능합니다. – Inox

+0

귀하가 직면 한 문제에 대한 설명이 없으므로 해당 정보를 포함하도록 질문을 편집해야합니다. –

+0

개념 (NavigationService.Navigating 핸들러)을보다 잘 이해할 수있는 주제를 만들었으니 이제는 더 분명 해졌기를 바랍니다. – Inox

관련 문제