WP7

2011-01-07 17 views
13

में प्रोग्राम किए गए पैनोरमा आइटम को प्रोग्रामेटिक रूप से सेट करने के लिए मैं WP7 ऐप में पैनोरामा नियंत्रण का उपयोग कर रहा हूं। PanoramaItems में से एक आपको दूसरे पृष्ठ पर ले जाता है, जो आपको ईमेलकॉमस्कास्क के माध्यम से एक ईमेल भेजने की अनुमति देता है। यदि आप ईमेल भेजने और बैक बटन दबाए रखने का चयन नहीं करते हैं, तो पैनोरामा आपके द्वारा चुने गए आइटम पर वापस आ जाता है। हालांकि, अगर आप एक ईमेल भेजने के लिए चुनते हैं (और इसलिए ऐप छोड़ें), तो यह पहले चयनित पैनोरमाइटम पर वापस नहीं आता है। इसके बजाय, यह पैनोरमा में पहले आइटम पर लौटता है। मैंने चयनित इंडेक्स का ट्रैक रखने और इसे सेट करने का प्रयास किया, लेकिन मुझे यह त्रुटि मिली कि चयनित इंडेक्स सेटटेबल नहीं है। यह एमएसडीएन दस्तावेज http://msdn.microsoft.com/en-us/library/microsoft.phone.controls.panorama.selectedindex%28VS.92%29.aspxWP7

पर पुष्टि की गई है क्या पैनोरमा पर चयनित इंडेक्स/आइटम मैन्युअल रूप से सेट करने का कोई तरीका है? यदि नहीं, तो क्या यह याद रखने का कोई तरीका है कि क्या चुना गया था, भले ही उपयोगकर्ता ऐप को ईमेल लिखने के लिए छोड़ देता है?

+0

DefaultItem के बारे में मेरी अंतिम टिप्पणी पर स्पष्टीकरण के साथ अपडेट किया गया। –

+0

मैंने इसका उत्तर यहां दिया है: http://stackoverflow.com/questions/17980606/how-to-smoothly-navigate-to-a-different-panorama-item/27018310#27018310 – Rivenfall

उत्तर

34

मुझे यकीन नहीं है कि क्या आप प्रोग्रामिंग को किसी अन्य एनीमेशन को PanoramaItem पर मजबूर कर सकते हैं, लेकिन आप Panorama.DefaultItem बदल सकते हैं।

तो तुम 3 PanoramaItem के हो सकता है और OnNavigatedTo() हैंडलर पर, के माध्यम से डिफ़ॉल्ट आइटम बदलने के लिए:

panoramaControl.DefaultItem = panoramaControl.Items[indexToSet]; 

यह है जब आप एक समाधि का पत्थर से उबरने में मदद मिलेगी।

+1

इसके नेविगेट ठीक से चलते हैं, लेकिन हम कैसे कर सकते हैं मेरे लिए – 1Mayur

+0

नेविगेट करते समय एनीमेशन प्रभाव जोड़ें, यह पैनोरामा शीर्षक प्रारंभ स्थिति बदलता है। शायद ऐसा इसलिए है क्योंकि मेरे पास कस्टम हेडर टेम्पलेट लागू है। – Rivenfall

7

आप इस धागे में सिलिकॉन शार्क द्वारा पोस्ट किए गए समाधान का प्रयास कर सकते हैं। यह काम करने के लिए नोट किया गया है, लेकिन केवल प्रारंभिक प्रदर्शन पर - जो कि कब्र के बाद राज्य को बहाल करने की आपकी आवश्यकताओं के लिए कोई समस्या नहीं होनी चाहिए।

How to programmatically set the visible item in a Panorama control?

आप चित्रमाला के SelectedIndex संपत्ति से वर्तमान में सक्रिय पेज प्राप्त कर सकते हैं।

दुर्भाग्य से DefualtItem सेटिंग को इस समस्या को हल करने के लिए केवल एक अनुमान है, जिसे आपने पहले से ही खोजा है।

संपादित करें: ध्यान रखें कि डिफॉल्टइटम सेट करना, पैनोरामा का कौन सा पृष्ठ पहला पृष्ठ है। यह एक सूक्ष्म अंतर है, लेकिन आप देखेंगे कि यह शीर्षक की स्थिति और पृष्ठभूमि छवि के चारों ओर लपेटने की स्थिति को कैसे देखता है।

2

सेट

pan.SetValue(Panorama.SelectedItemProperty, pan.Items[newSelectedItem]); 

द्वारा नए चुने गए आइटम हालांकि, यह प्रारंभिक पर ही काम करते हैं तो मेरे विचार जब हम चयनित आइटम को बदलने चित्रमाला नियंत्रण फिर से init जाने है। यह मेरा कोड है, बस पैनोरामा के बाद इसे जोड़ें। चयनित Item बदल रहा है।

(pan.Items[curIndex] as PanoramaItem).Visibility = Visibility.Collapsed; 
pan.SetValue(Panorama.SelectedItemProperty, pan.Items[(curIndex + 1) % pan.Items.Count]); 
pan.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); 
(pan.Items[curIndex] as PanoramaItem).Visibility = Visibility.Visible; 

लेकिन अब संक्रमण प्रभाव नहीं है! हालांकि, आप अपना स्वयं का निर्माण कर सकते हैं।

यह मेरे लिए महान काम करते हैं, इस पेज भी सही फिसलने http://xme.im/slide-or-change-panorama-selected-item-programatically

3

मैं सफलता के बिना यहाँ सूचीबद्ध समाधानों का परीक्षण करने के लिए एक प्रभाव पैदा करते हैं। यहां मैंने जो किया वह एक आकर्षण की तरह काम करता है!

PanoramaItem panItem = (PanoramaItem)panorama.Items[1]; 

panorama.Items.Remove(panItem); 

panorama.Items.Insert(0, panItem); 

आप सूची से पैनल को हटाने और पुन: डालने इच्छित स्थान पर यह करने के लिए की जरूरत है!

5

यहां एक समाधान है।यह अपेक्षित काम करता है और आपके पैनोरामा को पुनर्व्यवस्थित नहीं करता है, इसलिए आपका यूजर इंटरफेस सुसंगत है।

pan.SetValue(Panorama.SelectedItemProperty, panoramaItem); 
Panorama temp = pan; 
LayoutRoot.Children.Remove(pan); 
LayoutRoot.Children.Add(temp); 
LayoutRoot.UpdateLayout(); 

इस में है कि यह की तरह चित्रमाला चाहिए अच्छी तरह से स्लाइड नहीं करता है एक आदर्श समाधान नहीं है, और यह शायद बहुत ही कुशल नहीं है, लेकिन यदि आप डिफ़ॉल्ट आइटम नहीं बदल रहे हैं तो दूसरी तरफ तो अपने यूजर इंटरफेस के अनुरूप रहता है ।

+0

आपको शायद अपने प्रस्ताव को थोड़ी अधिक सकारात्मक रूप से दोबारा प्रस्तुत करना चाहिए, क्योंकि मुझे नहीं लगता कि मैं आपके समाधान का उपयोग करके पूरी तरह से सहज महसूस करूंगा, जैसा कि अब यह पढ़ता है। – trudyscousin

+0

यह सही तरीका है ... शर्म की कोई स्लाइड प्रभाव नहीं है, लेकिन यूआई को पुनर्व्यवस्थित नहीं करता है। मेरे से +2 –

1

डिवाइस इस परिदृश्य का उपयोग कर रहा है जब डिवाइस लैंडस्केप व्यू में जाता है, तो मैं शायद वर्तमान स्थिति को एप्लिकेशन स्थिति में निकालने का अंत कर दूंगा। पैनोरमा लैंडस्केप ओरिएंटेशन में नो-गो है।

private int hub_page_index; 

protected override void OnOrientationChanged(OrientationChangedEventArgs e) 
{ 
    base.OnOrientationChanged(e); 

    if (panorama.Visibility == Visibility.Visible) 
    { 
     hub_page_index = panorama.SelectedIndex; 
    } 
    else if (pivot.Visibility == Visibility.Visible) 
    { 
     hub_page_index = pivot.SelectedIndex; 
    } 

    if (e.Orientation == PageOrientation.Landscape 
    || e.Orientation == PageOrientation.LandscapeLeft 
    || e.Orientation == PageOrientation.LandscapeRight) 
    { 
    // Display Pivot in Landscape orientation 
     pivot.SetValue(Pivot.SelectedItemProperty, pivot.Items[panorama.SelectedIndex]); 
     panorama.Visibility = Visibility.Collapsed; 
     pivot.Visibility = Visibility.Visible; 
    } 
    else 
    { 
     // Display Panorama in Portrait orientation 
     panorama.SetValue(Panorama.SelectedItemProperty, panorama.Items[pivot.SelectedIndex]); 
     pivot.Visibility = Visibility.Collapsed; 
     panorama.Visibility = Visibility.Visible; 
    } 
} 
+0

अच्छा। आपको कोड को ट्रिम करना चाहिए ताकि समाधान अधिक स्पष्ट हो। मैंने लगभग आपके कोड को छोड़ दिया क्योंकि यह अप्रासंगिक लग रहा था, लेकिन यह मेरी समस्या को हल करने के लिए निकला। –