2011-12-11 8 views
6

WPF में, मेरे पास 7 अलग-अलग समूहबॉक्स वाले स्क्रॉलव्यूयर हैं। प्रत्येक समूहबॉक्स यह विभिन्न रूपों के लिए स्वयं का व्यक्तिगत अनुभाग है। चूंकि स्क्रोलव्यूवर इतना लंबा है, मैंने पैनल के बाईं ओर एक स्टैपपैनल में बटनों की एक श्रृंखला रखी है, और कोड-बैक किया है ताकि बटन पर क्लिक करने से संबंधित समूहबॉक्स के लिए BringIntoView विधि ट्रिगर हो।BringIntoView विधि

मेरा सवाल यह है कि, BringIntoView को प्रत्येक बार दृश्य अनुभाग के शीर्ष पर समूहबॉक्स को स्थानांतरित करने के लिए मजबूर करने का कोई तरीका है। डिफ़ॉल्ट रूप से BringIntoView केवल स्क्रॉलव्यूवर को तब तक ले जाता है जब तक कि संपूर्ण समूहबॉक्स दृश्य में न हो, न कि यह सबसे ऊपर प्रदर्शित आइटम है। क्या इसके चारों ओर एक रास्ता है?

मैंने स्क्रॉलटॉवर्टिकलऑफसेट का उपयोग करने में देखा, लेकिन सही स्थिति पाने के तरीके को समझ नहीं पाया, क्योंकि ज्यादातर कह रहे हैं कि ग्रुपबॉक्स में कोई स्थान संपत्ति नहीं है, जिसे मैं स्थिति प्राप्त करने के लिए उपयोग करने जा रहा था, फिर इसे स्क्रॉलटॉवर्टिकल ऑफसेट के साथ सेट करें । एक चीज जिसे मैंने टाइप करते समय सोचा था, प्रत्येक बटन-प्रेस को पहले ग्रुपबॉक्स में दबाएं, फिर तुरंत सही पर जारी रखें, लेकिन ऐसा लगता है कि हैक-आश, और मैं सही तरीका ढूंढना पसंद करता हूं। :)

+1

सिर्फ सलाह का एक शब्द, थोड़ा कम कोड के बारे में और उस छोटे अनुच्छेद को छोटे और पचाने वाले पैराग्राफ में तोड़ना। अन्यथा हमारे पास सिर्फ एक दीवार की दीवार और कोड की दीवार है जो अधिक ध्यान आकर्षित नहीं करेगी और लोगों को बंद कर देगी। यहां पर सही प्रश्न पूछने के तरीके पर जॉन स्कीट्स उत्कृष्ट पोस्ट का एक पठन पढ़ें: http://msmvps.com/blogs/jon_skeet/archive/2010/08/29/writing-the-perfect-question.aspx – Kev

+0

+1 प्रश्न – SvenG

उत्तर

9

इस एक का प्रयास करें:

private void ScrollToGroupBox(GroupBox groupBox) 
{ 
    GeneralTransform groupBoxTransform = groupBox.TransformToAncestor(scrollViewer); 
    Rect rectangle = groupBoxTransform.TransformBounds(new Rect(new Point(0, 0), groupBox.RenderSize)); 
    scrollViewer.ScrollToVerticalOffset(rectangle.Top + scrollViewer.VerticalOffset); 
} 

कोड ScrollViewer के अंदर अपने GroupBox और इसे करने के लिए स्क्रॉल की स्थिति हो जाता है।

+1

संपादित करना और बढ़ाना बहुत अच्छा काम करता है! अब मेरा एकमात्र मुद्दा नीचे से पर्याप्त कमरे छोड़ रहा है ताकि अंतिम समूह बॉक्स कमरे से बाहर होने से पहले शीर्ष तक पहुंच सके। मैंने अंतिम ग्रुपबॉक्स के निचले हिस्से में मार्जिन जोड़कर ऐसा किया, लेकिन यदि आप बेहतर तरीके से जानते हैं तो मुझे यह सुनना अच्छा लगेगा। यह काम करता है कि मेरे पास यह कैसे है, लेकिन यदि मैं खिड़की का आकार लंबा कर देता हूं तो यह काफी नहीं पहुंचता है। –

+1

खुशी है कि मैं मदद कर सकता हूं। मुझे बेहतर तरीके से पता नहीं है लेकिन एक मार्जिन जोड़ना या ग्रुपबॉक्स ऊंचाई को स्क्रॉलव्यूअर के समान मूल्य पर सेट करना है। आप xaml कोड का पालन करके स्क्रॉलव्यूअर में अंतिम समूह बॉक्स की ऊंचाई को बाध्य करके ऐसा कर सकते हैं: <समूहबॉक्स ऊंचाई = "{बाइंडिंग पथ = वास्तविक हाइट, सापेक्ष स्रोत = {सापेक्ष स्रोत पूर्वजों प्रकार = {x: टाइप स्क्रॉलव्यूअर}}} .. /> – SvenG