2012-12-26 25 views
7

पृष्ठों के बीच नेविगेट करने में मुझे लगता है कि आपको वापस/आगे या 'होम' पृष्ठ पर जाने के लिए फ़ंक्शंस हैं। हालांकि, मुझे जो कुछ चाहिए वह वापस जाने में सक्षम होना है, लेकिन उन पृष्ठों पर छोड़ दें जिन्हें उपयोगकर्ता अब और नहीं देख पाएंगे। मैंने चारों ओर खोज की और निम्नलिखित पाया: http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/3819f389-3bfc-4c59-a919-272927fc9229विंडोज 8 में नेविगेशन स्टैक से पॉप पेज ऐप

मैंने GetNavigationStack का उपयोग करने का प्रयास किया, लेकिन यह नेविगेशन पैरामीटर के रूप में पारित करने और ऑब्जेक्ट करने में सक्षम होने के कारण विफल रहा है। मुझे 2 पैरामीटर पास करने के लिए टुपल का उपयोग करना पड़ रहा है, लेकिन इसे क्रमबद्ध नहीं किया जा सकता है और इसलिए मुझे इसे संपादित करने और मैन्युअल रूप से पृष्ठों को हटाने के लिए नेविगेशन स्टैक नहीं मिल सकता है।

मैं तो इस WinRT - How to ignore or delete page from navigation history मिल गया और सोचा था कि मैं एक बूलियन मान सेट किया जा सकता है कि शामिल हो सकते हैं, तो पेज

आप छोड़ दिया करने के लिए LayoutAwarePage.cs (वर्ग सभी स्क्रीन से विरासत, विजुअल स्टूडियो द्वारा उत्पन्न) मैं जोड़ा में था protected bool CanGoBackToThisPage { get; set; } जिसे आप इस पृष्ठ पर नहीं जाना चाहते हैं, तो सेट किया जा सकता है, लेकिन इसमें कुछ समस्याएं भी हैं क्योंकि मुझे पता नहीं है कि क्या आप किसी पृष्ठ पर फिर से देखने में सक्षम होना चाहते हैं जब तक आप वर्तमान पृष्ठ पर कुछ नहीं कर लेते । मुझे नहीं लगता कि आप previousFrame.CanGoBackToThisPage = true जैसे कुछ कर सकते हैं। साथ ही, Frame ऑब्जेक्ट जिस पर आपके पास पहुंच है (मुझे लगता है) वास्तविक पृष्ठ ऑब्जेक्ट तक पहुंच नहीं है, लेकिन इसके बजाय कुछ सारांश ऑब्जेक्ट है और मुझे नहीं पता कि मैं इस बूलियन को उस सारांश ऑब्जेक्ट में कैसे प्राप्त करूंगा।

क्या किसी को नेविगेशन स्टैक से पिछले/वर्तमान पृष्ठ को हटाने का एक आसान तरीका पता है? ऐसा लगता है कि यह वास्तव में एक आम समस्या होगी इसलिए मुझे लगता है कि माइक्रोसॉफ्ट ने हमें ऐसा करने का कोई तरीका नहीं दिया है।

धन्यवाद

+1

नेविगेशन इतिहास मैन्युअल रूप से संपादित करने का प्रयास करना एक बुरा विचार है। आप बस एक को वापस नेविगेट कर सकते हैं और फिर जांच कर सकते हैं कि आपको पीछे की ओर नेविगेट करना जारी रखना चाहिए या नहीं। – mydogisbox

उत्तर

5

ठीक है, मैं क्यों मैं प्रश्न पोस्ट करने से पहले इसके बारे में नहीं सोचा था कि पता नहीं है। शायद मैं बस थक गया हूँ।

मैं सिर्फ दो बार Frame.GoBack() कहा जाता है और फिर पेज मैं जाना चाहता हूँ पर नेविगेट:

// If the user presses back we don't want them to visit this page or the previous page they were on so remove them from the navigation stack 
Frame.GoBack(); 
Frame.GoBack(); 

// Go to the detail page 
this.Frame.Navigate(typeof(GroupDetailPage), mGroup); 

मुझे लगता है मैं बुला GoBack() वास्तव में पिछली बार की पेज चेतन होगा सोचा है, लेकिन यह नहीं है

+0

नेविगेशन एनीमेशन को नोटिस करने के लिए पर्याप्त तेज़ नहीं है, लेकिन लोडस्टेट ईवेंट ट्रिगर किया गया है (और इस प्रकार तर्क वहां निष्पादित किया जाएगा)। – Bart

+0

यदि आप जानते हैं कि आप हमेशा दो स्तरों पर जा रहे हैं, तो मुझे लगता है कि आप कॉल को गोबैक() पर छोड़ सकते हैं और उस पृष्ठ में निम्न कोड जोड़ सकते हैं जिसे आप लोड स्टेट विधि में नेविगेट करते हैं: "अगर (फ्रेम। बैकस्टैक। कोई भी()) {Frame.BackStack.Clear();} " –

-1

यदि आप फ्रेम नेविगेशन का उपयोग कर रहे हैं तो यह करें। फ्रैम.बैकस्टैक। नए फ्रेम के लोडस्टेट में हटाएं और पिछले पृष्ठों को एक आवश्यकतानुसार साफ़ करें।

3
Frame.BackStack.RemoveAt(Frame.BackStack.Count - 1); 

हालांकि मुझे जीवीएमनी को प्रोप देना है क्योंकि उनके जवाब में मदद मिली है, हालांकि यह बहुत पूरा नहीं था।

यह लोडस्टेट ईवेंट ट्रिगर होने के साथ ऊपर उल्लिखित समस्याओं से बच जाएगा और यह एक और अधिक सुरुचिपूर्ण समाधान है।

2

मैं एक ही मुद्दे में भाग गया और BackStack से वर्तमान पृष्ठ को निकाल कर इस समाधान कर लिया है के बाद दूर नेविगेट:

protected override void OnNavigatedFrom(NavigationEventArgs e) 
{ 
    base.OnNavigatedFrom(e); 

    // Remove current page from history 
    var pageStackEntry = Frame.BackStack.Last(entry => entry.SourcePageType == this.GetType()); 
    Frame.BackStack.Remove(pageStackEntry); 
} 
0

मैं NavigationCacheMode का इस्तेमाल किया है कई उदाहरण से बचने के लिए, जबकि नेविगेट फ्रेम में अन्य पृष्ठ पर बना दिया गया है ।

public SamplePage() 
    { 
     this.InitializeComponent(); 
     this.NavigationCacheMode = global::Windows.UI.Xaml.Navigation.NavigationCacheMode.Required; 
    }