2013-02-27 138 views
5

मुझे आशा है कि यह एक डुप्लिकेट नहीं है लेकिन मुझे ScrollToVerticalOffset() का उपयोग करने के तरीके पर कोई दस्तावेज़ीकरण या उदाहरण नहीं मिल रहा है। मैं इसे विंडोज फोन 8 ऐप में उपयोग कर रहा हूं, लेकिन मुझे लगता है कि यह अभी भी WP7 और सिल्वरलाइट पर लागू होगा (हालांकि, अगर मैं गलत हूं तो मुझे सही करने के लिए स्वतंत्र महसूस करें)।ScrollViewer.ScrollToVerticalOffset का उपयोग कैसे करें?

<phone.PivotItem> 
    <ScrollViewer> 
     <Grid Height="1500"> 
     <Grid.RowDefinitions> 
      <!-- about 20 rows, all auto-height --> 
     </Grid.RowDefinitions> 

     <Border Grid.Row="0"> 
      <TextBox x:Name="txt1" /> 
     </Border> 
     <Border Grid.Row="1"> 
      <TextBox x:Name="txt2" /> 
     </Border> 

     <!-- ...... --> 

     <Border Grid.Row="19"> 
      <TextBox x:Name="txt20" /> 
     </Border> 
     </Grid> 
    </ScrollViewer> 
</phone.PivotItem> 

तो जैसा कि आप देख सकते हैं, मैं एक PivotItem के भीतर एक ScrollViewer मिल गया है, और अंदर एक Grid है:

तो यहाँ मेरी बुनियादी सेट अप (स्मृति से छद्म कोड) है। Grid में लगभग 20 TextBox एस हैं, प्रत्येक Border के भीतर। जब मैं इस पृष्ठ को लोड करता हूं, तो मैं गतिशील रूप से इन TextBox एस में से किसी एक पर ध्यान केंद्रित कर रहा हूं, इसलिए जब भी मैं TextBox # 6-20 (मोटे तौर पर) पर ध्यान केंद्रित करता हूं - मुझे इसे देखने के लिए मैन्युअल रूप से नीचे स्क्रॉल करना होगा। मैं अपने ScrollViewer को स्वत: स्क्रॉल करना चाहता हूं ताकि जो भी TextBox फोकस हो, यह उपयोगकर्ता के देखने के लिए केंद्रित होगा।

documentationScrollToVerticalOffset() के लिए कहते हैं:

स्क्रॉल सामग्री है कि निर्दिष्ट खड़ी ऑफसेट स्थिति में ScrollViewer के भीतर है।

और यह System.Double का एक प्रकार स्वीकार करता है।

जो मुझे समझ में नहीं आता है ए) वह मान जो मुझे पास करना है, और बी) मैं यह मूल्य कैसे प्राप्त कर सकता हूं? क्या यह Grid (1500) की ऊंचाई और 0 के बीच की संख्या होना चाहिए? यदि हां, तो मैं किसी दिए गए TextBox की स्थिति कैसे निर्धारित कर सकता हूं ताकि मैं इसे स्क्रॉल कर सकूं?

यदि कोई सीधा उदाहरण हैं, तो कृपया उनसे लिंक करने के लिए स्वतंत्र महसूस करें। मुझे यकीन नहीं है कि इस विधि को कॉल करते समय ScrollViewer के भीतर सामग्री महत्वपूर्ण है, लेकिन अगर ऐसा लगता है कि मैं वास्तव में यह दिखाना चाहता हूं कि मैं इसका उपयोग कैसे कर रहा हूं।

अग्रिम में बहुत धन्यवाद!

+0

छोटा सवाल, आपने इस सेटअप को क्यों लागू किया है? किसी भी कारण से longlistselector का उपयोग न करें?मैं इसके बारे में सोच रहा था :) – Depechie

+0

अच्छा सवाल - मुझे लगता है कि मुख्य कारण यह है कि मैं 'लॉन्गलिस्टिस्ट' से परिचित नहीं था, और मैंने यह जानने के लिए पर्याप्त शोध नहीं किया है कि यह एक बेहतर विकल्प होगा या नहीं। असल में, मैं एक "शीर्ष दस लीडरबोर्ड" प्रकार की चीज बना रहा हूं जो शीर्ष दस नाम और स्कोर प्रदर्शित करेगा। यदि कोई नया स्कोर 10 वें स्कोर से है, तो मैं सही स्थिति में 'टेक्स्टबॉक्स' डाल दूंगा और उपयोगकर्ता को इसे सहेजने दूंगा। स्पष्ट रूप से ऊपर मेरा छद्म कोड इस कार्यक्षमता को प्रतिबिंबित नहीं करता है। – lhan

+0

तो मेरे वास्तविक परिदृश्य में, 10 अलग-अलग 'टेक्स्टब्लॉक' हैं जिन्हें मैं लेबल के रूप में उपयोग कर रहा हूं, और फिर उन्हें "नई प्रविष्टि" के लिए समायोजित/स्थानांतरित किया जाता है और उपयोगकर्ता को सहेजने के लिए 'टेक्स्टबॉक्स' रखा जाता है उस स्थिति में उनका नाम। – lhan

उत्तर

10

आप UIElement.TransformToVisual कॉल का उपयोग कर किसी अन्य UIElement के सापेक्ष कोई UIElement की स्थिति देख सकते हैं।

सबसे पहले, टेक्स्टबॉक्स और स्क्रॉलव्यूअर के बीच परिवर्तन प्राप्त करें।

GeneralTransform transform = textBox.TransformToVisual(scrollViewer); 

फिर, पता लगाएं कि टेक्स्टबॉक्स का कौन सा बिंदु (0,0) स्क्रॉल व्यूअर के सापेक्ष है। मतलब, टेक्स्टबॉक्स मूल (0,0) स्क्रॉलव्यूयर स्थिति पर स्थित है।

Point textBoxPosition = transform.Transform(new Point(0, 0)); 

अब आप ScrollViewer के पाठ बॉक्स रिश्तेदार के Y स्थिति जानते हैं कि, कि वाई ऑफसेट करने के लिए स्क्रॉल करें।

scrollViewer.ScrollToVerticalOffset(textBoxPosition.Y); 

शुभकामनाएँ!

+0

सही काम करता है। एक बार फिर धन्यवाद! – lhan

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

  • कोई संबंधित समस्या नहीं^_^