2012-06-11 7 views
6

एक विंडोज फोन 7 आवेदन मैं एक CurrentPage है, जो एक विशेष घटना पर उपयोग कर एक नया पृष्ठ पर नेविगेट करता NavigationService हो गया:बैक स्टैक पर वर्तमान पृष्ठ डाले बिना किसी नए पेज पर नेविगेट करें?

NavigationService.Navigate(new Uri("/NewPage.xaml", UriKind.Relative)); 

अब जब उपयोगकर्ता NewPage पर वापस क्लिक करता है मैं करने के लिए एप्लिकेशन चाहते CurrentPage को छोड़ें और सीधे ऐप के मुख्य पृष्ठ पर जाएं।

मैंने NavigationService.RemoveBackEntry का उपयोग करने का प्रयास किया, लेकिन यह CurrentPage के बजाय मुख्य पृष्ठ को हटा देता है।

मैं बैक स्टैक पर वर्तमान डाले बिना किसी नए पेज पर कैसे जा सकता हूं?

उत्तर

11

पैरामीटर के साथ NewPage.xaml पास पर नेविगेट करते समय आपको पता है कि पिछले पृष्ठ को बैकस्टैक से कब निकालना है।

आप इस तरह के रूप में यह कर सकते हैं:

जब से नेविगेट CurrentPage.xaml साथ पास पैरामीटर NewPage.xaml को

 

    bool remove = true; 
    String removeParam = remove ? bool.TrueString : bool.FalseString; 

    NavigationService.Navigate(new Uri("/NewPage.xaml?removePrevious="+removeParam , UriKind.Relative)); 

NewPage की OnNavigatedTo घटना में .xaml, जांचें कि पिछले पृष्ठ को निकालना है या नहीं।

 

    bool remove = false; 

    if (NavigationContext.QueryString.ContainsKey("removePrevious")) 
    { 
     remove = ((string)NavigationContext.QueryString["removePrevious"]).Equals(bool.TrueString); 
     NavigationContext.QueryString.Remove("removePrevious"); 
    } 

    if(remove) 
    { 
     NavigationService.RemoveBackEntry(); 
    } 

इस तरह, आप CurrentPage.xaml पर फैसला कर सकते हैं backstack से निकालने के लिए चाहते हैं।

+0

अब हम विंडोज स्टोर ऐप्स पर यह कैसे करते हैं? ऐसा लगता है कि हमारे पास 'RemoveBackEntry() 'प्रतीत नहीं होता है? – GONeale

+0

मैंने अभी तक उसमें ध्यान नहीं दिया है, मुझे पता है कि यह WP7 पर काम करता है। अगर मुझे जवाब में आना पड़ता है तो मैं इसे यहां पोस्ट करूंगा। – akalucas

0

यह आपके कॉलिंग को जल्दी से निकालने की तरह लगता है (जबकि आप अभी भी CurrentPage.xaml पर हैं)। Thats क्यों इसे हटा रहा है MainPage.xaml। जब आप NewPage.xaml पर नेविगेट करते हैं, OnNavigatedTo ईवेंट कॉल NavigationService.RemoveBackEntry में और समस्या को ठीक करना चाहिए।

+0

मुझे इसे वर्तमान पेज पर कॉल करना है, क्योंकि न्यूपेज को पता नहीं है कि इसे बैक स्टैक को हटाने की आवश्यकता है। – Sam

+0

@ सैम अकालुस के जवाब की जांच करें। यह उस तरह की बात है जिसे मैंने ध्यान में रखकर इसे ऑनवॉजिटेड टू इवेंट में बुलाया था। आप यह भी बता सकते हैं कि CurrentPage.xaml से आपका आ रहा है या नहीं। – loyalpenguin

1

आपने "NavigationService.RemoveBackEntry()" कहां से कहा है? मुझे लगता है कि आपको इसे नए पेज पर करना है, न कि उस पृष्ठ पर जिसे आप छोड़ना चाहते हैं!

संपादित करें: तो बेहतर तस्वीर प्राप्त करने के लिए: आपके पास मुख्य पृष्ठ -> 1rst उप पृष्ठ (पिछली नेविगेशन पर छोड़ा जाना चाहिए) -> दूसरा उप पृष्ठ जो 1rst उप पृष्ठ से अपरिवर्तित है।

2 विचार: 1) "NavigationService.RemoveBackEntry()" कॉल करने के लिए 1rst उप पेज 2 की OnNavigatedFrom-इवेंट में प्रयास करें) 1rst उप पेज के OnNavigatedTo-इवेंट में देखें कि क्या NavigationMode (घटना को देखने के तर्क) == वापस और एक बार फिर नेविगेट करें।

+0

मुझे इसे वर्तमान पेज पर कॉल करना है, क्योंकि न्यूपेज को पता नहीं है कि इसे बैक स्टैक को हटाने की जरूरत है। – Sam

+0

मेरा जवाब संपादित किया –