2011-04-14 17 views
14

मेरे पास एक स्क्रॉलव्यूयर है जिसमें टेक्स्टब्लॉक आइटमों का एक स्टैपपैनल है (वास्तव में, ये शायद टैबिटैम हैं, मैं एक टैबलेट टेम्पलेट में डिफ़ॉल्ट टैबपैनल को ओवरराइड करने के लिए स्क्रॉलव्यूअर के अंदर एक स्टैकपैन का उपयोग कर रहा हूं)। मैं क्या करने में सक्षम होना चाहता हूं, जब चयनित टैब बदल जाता है, तो नए चुने हुए टैब को स्क्रॉलव्यूअर के दृश्य क्षेत्र के केंद्र में ले जाएं। आदर्श रूप से यह सभी टैबों के लिए काम करेगा, यहां तक ​​कि दूर के किनारे भी, लेकिन मैं स्क्रोलव्यूर को स्क्रॉल करने के लिए कहने में सक्षम होने के लिए बसूंगा कि एक विशेष तत्व जितना संभव हो सके केंद्रित के करीब है।WPF - स्क्रॉलव्यूअर में सामग्री केंद्रित करना?

क्या WPF में इसे प्राप्त करने के कोई स्पष्ट तरीके हैं? सभी समाधान जो मैं अभी सोच सकता हूं, कस्टम नियंत्रण पर बहुत सारे काम शामिल हैं।

enter image description here

+0

स्क्रीनशॉट स्पष्टीकरण के साथ मदद करने के लिए: [http://img20.imageshack.us/i/tabscreenshot.png/](http://img20। imageshack.us/i/tabscreenshot.png/) –

+2

@ रॉबर्ट लेवी: ऐसा नहीं है कि यह कैसे किया जाना चाहिए, अगर कोई जवाब वास्तव में किसी प्रश्न का उत्तर नहीं देता है तो उनमें से किसी को स्वीकार करने की आवश्यकता नहीं है। –

उत्तर

7

ScrollViewer.ScrollToHorizontalOffset() आप के लिए क्या देख रहे है। बस गणना करने की आवश्यकता है कि आपके चुने हुए तत्व का ऑफसेट स्टैकपैन से संबंधित है। आप इसे selectedElement.TranslatePoint(new Point(), stackPanel)

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

इस सुंदर लग रही हो, एक टाइमर में ScrollToHorizontalOffset फोन कूद

12

आप आसानी से केंद्र निम्नलिखित कोड का उपयोग कर के लिए सामग्री सेट कर सकते हैं के बजाय स्क्रॉल 'चेतन' बनाने के लिए बनाने के लिए;

scrollviewer.ScrollToVerticalOffset(scrollviewer.ScrollableHeight/2); 
scrollviewer.ScrollToHorizontalOffset(scrollviewer.ScrollableWidth/2); 
+0

इस टिप के लिए धन्यवाद। मैं एमवीवीएम पैटर्न हूं और ज़ूमिंग करते समय एक छवि केंद्रित रखने के लिए आवश्यक है। मैंने सरलता से मेरे स्क्रॉल चेंज किए गए ईवेंट पर एक कमांड का उपयोग किया और मेरे स्क्रॉलव्यूअर को कमांड के पैरामीटर के रूप में पास कर दिया। वहां से मैं अपने कंटेंट सेंटर को अपने व्यूमोडेल से रखने में सक्षम था। यद्यपि एक हैक लगता है। मैं अंततः एक कस्टम स्क्रॉलव्यूअर तैयार करूंगा जो मुझे निर्भरता गुणों के माध्यम से ऐसा करने देता है। – KyleLib

0

यह मेरे लिए काम किया:

//for ScrollViewer s; 
s.ScrollToHorizontalOffset((s.ExtentWidth - s.ViewportWidth)/2); 
s.ScrollToVerticalOffset((s.ExtentHeight - s.ViewportHeight)/2);