2012-08-31 13 views
6

जब कोई पृष्ठ Silverlight में नेविगेट किया जाता है तो आप इस विधि को ओवरराइड कर सकते हैं।चांदी के नेविगेशन अनुप्रयोग में बैक बटन या अग्रेषित बटन नेविगेशन का पता लगाने के लिए

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
} 

NavigationEventArgs एक NavigationMode गणन जो

public enum NavigationMode 
{ 
    New = 0, 
    Back = 1, 
    Forward = 2, 
    Refresh = 3, 
} 

के रूप में परिभाषित किया गया है लेकिन बुला e.NavigationMode हमेशा फेंकता है एक NotImplementedException

वहाँ एक पेज का पता लगाने के Silverlight में एक तरह से क्योंकि पर नेविगेट किया जा रहा है है उपयोगकर्ता ने आगे/पीछे ब्राउज़र बटन मारा।

जो मैं प्राप्त करने की कोशिश कर रहा हूं वह किसी प्रकार का राज्य है जिसे उपयोगकर्ता बैक बटन हिट करते समय संरक्षित किया जा सकता है।

उदाहरण के लिए मान लें कि आपके पास एक ग्राहक पृष्ठ है जो डेटाग्रिड में ग्राहकों की एक सूची दिखा रहा है। उपयोगकर्ता एक ग्राहक का चयन कर सकता है और एक विस्तृत दृश्य है जो उस ग्राहक के सभी ऑर्डर दिखाता है। अब ऑर्डर आइटम के भीतर आप एक हाइपरलिंक लिंक पर क्लिक कर सकते हैं जो आपको ऑर्डर के शिपिंग इतिहास पर ले जाता है जो एक अलग पृष्ठ है। जब उपयोगकर्ता बैक बटन हिट करता है तो मैं ग्राहकों के पृष्ठ पर वापस जाना चाहता हूं और वह ग्राहक चुन रहा हूं जिसे वह देख रहा था। क्या यह वास्तव में संभव है ?

मैं भी टुकड़ा नेविगेशन सुविधा

NavigationService.Navigate(new Uri("#currentcustomerid=" 
     + customer.Id.ToString(), UriKind.Relative)); 

बाहर करने की कोशिश की जब ग्राहक चयन परिवर्तन लेकिन उपयोगकर्ता ग्राहक पृष्ठ पर विभिन्न ग्राहकों क्लिक करता है यह इतिहास के लिए बहुत अधिक आइटम कहते हैं।

संपादित

वहाँ भी एक विधि आप

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) 
{ 
} 

जो NavigationService.Navigating घटना से निपटने के रूप में BugFinder के जवाब ने संकेत रूप में ही है ओवरराइड कर सकते हैं। इस विधि में e.NavigationMode जब आप बैक या फॉरवर्ड बटन दबाते हैं तो हमेशा New लौटाता है। केवल समय इस विधि रिटर्न Back है जब आप स्पष्ट रूप से कहते हैं NavigationService.GoBack()

उत्तर

1

public enum NavigationMode 
{ 
    New = 0, 
    Back = 1, 
    Forward = 2, 
    Refresh = 3, 
} 

नेविगेट घटना .. पर लागू होता है

अगर मैं ऐसा

_ns.Navigating += ns_Navigating; 
     void ns_Navigating(object sender, NavigatingCancelEventArgs e) 
     { 

      if (SecurityCheck(e.Uri.OriginalString)) return; 
      e.Cancel = true; 
      ShowError("You are not authorised to view this page"); 
     } 

मैं वहाँ देख सकते हैं कि e.NavigationMode सेट है। आप वहां अपना परीक्षण कर सकते हैं?

+0

यहां तक ​​कि जब आप बैक या फॉरवर्ड बटन दबाते हैं। ** नेविगेशन मोड ** इस विधि में हमेशा 'NavigationMode.New' है। –

1

मुझे नहीं लगता कि वहाँ किसी भी आसान तरीके से यह बॉक्स से बाहर करने के लिए, के रूप में तक मुझे पता है कर रहे हैं।

आप क्या हासिल करने की कोशिश कर रहे हैं ताकि आप एकता और चश्मे की आवश्यकता होगी आसानी से, एक रूपरेखा मैं http://ultimateframework.codeplex.com

क्या मैंने किया है एक साथ Silverlight नेविगेशन फ्रेम और चश्मे नेविगेशन जाल करने के लिए है पर बनाया का उपयोग किया जा सकता है और एमवीवीएम दोस्ताना।

आप क्या प्राप्त करने के लिए निम्न तरीकों

1) को लागू करें IsNavigationTarget में ढांचे का उपयोग किया जा सकता है चाहता हूँ और सच रिटर्न -> जब वापस नेविगेट, इसलिए, चयन रखते हुए जो एक ही उदाहरण रखेंगे/चयनित आइटम।

2) ट्रैक करने के लिए तुम कहाँ, से कहना/आइटम/1 पिछले ढेर था आया पहुंचें onnavigatedto की पत्रिका है, तो आप बटन वापस पता मद से दबाया गया है 1.

3) तुम भी लागू कर सकते हैं अपने खुद वापस/आगे/एक ही परिणाम (codeplex में नहीं अभी तक) को प्राप्त करने के लिए प्रदान की कस्टम नियंत्रण

मैं वास्तव में काम पर उत्पादन कोड के लिए इसका इस्तेमाल करते हैं, और मैं इसे बनाया भीतर ताज़ा है, तो इसे आज़माने के लिए संकोच न करें। ध्यान दें कि वहां का संस्करण छोटी है, और मेरे पास अभी तक हमारे नवीनतम निर्माण को रिलीज़ करने का समय नहीं है, लेकिन आपको इसकी आवश्यकता होनी चाहिए, मैं इसे आपके लिए अपडेट करूँगा :), बस मुझे दोपहर।

1

सेट usercontrol में एक चर contentframe जो इंगित करता है जो ग्राहक सक्रिय है युक्त।

usercontrol में contentframe के नेविगेट घटना के लिए कोई हैंडलर जोड़ें। वेरिएबल को जांचने के लिए इसका उपयोग करें कि ग्राहक क्या सक्रिय है (यदि चर शून्य नहीं है), और ग्राहक का चयन करने के लिए।

+0

मुझे लगता है कि आप इस सवाल का मुद्दा चूक गए हैं। तथ्य यह है कि जब मैं पृष्ठ पर नेविगेट किया जाता है तो मैं यह नहीं समझ सकता कि यह पिछड़ा नेविगेशन या ताजा नेविगेशन के कारण है या नहीं। राज्य की मदद कैसे संग्रहित करेगा? –

+0

क्योंकि आप बता सकते हैं कि वे कहां से आ रहे हैं। यदि वे बैक बटन की तुलना में दूसरे पृष्ठ से पहले दूसरे पृष्ठ पर नेविगेट करते हैं, तो ग्राहक को ध्यान दिए बिना प्रदर्शित किया जाएगा - लेकिन शायद यह वैसे भी अवांछित नहीं होगा। – NeutralHandle

संबंधित मुद्दे