c# - Specify scroll owner for panel -


मेरे पास स्तरित सामग्री के साथ एक ScrollViewer है उदा।:

  & lt; ScrollViewer & gt; & LT; ग्रिड & gt; & Lt; बाल x: नाम = "परत 1" / & gt; & Lt; बाल x: नाम = "लेयर 2" / & gt; & Lt; बाल x: नाम = "लेयर 3" / & gt; & Lt; / ग्रिड & gt; & Lt; / ScrollViewer & gt;  

बच्चों को एक-दूसरे के ऊपर होना चाहिए और उनका आकार समान होना चाहिए। अब, मेरा बाल वर्ग औजार। ऊपर ग्रिड पर विचार करें मैं एक बच्चे को ScrollViewer के स्वामी होने के लिए चुनना चाहता हूं। इस प्रकार, "लेयर 1" स्क्रॉलबारों को अपडेट करेगा और अन्य परतें सिर्फ यह सुनिश्चित कर लेंगे कि उनके पास स्क्रॉल मालिक के समान आकार है ऐसा कुछ बहुत अच्छा होता:

<प्री> & gt; ग्रिड स्क्रॉल विवर। स्क्रॉल ओनर = "लेयर 1" & gt;

जाहिर है, ग्रिड यहां उपयोग करने के लिए गलत नियंत्रण है। क्या WPF को बॉक्स से ऊपर की तरह कुछ पसंद है? यदि नहीं, तो इस व्यवहार को पूरा करने का सबसे अच्छा तरीका क्या होगा?

कुछ भी विशेष रूप से सुरुचिपूर्ण नहीं है। एक (थोड़ा थकाऊ) विकल्प ग्रिड को IScrollInfo को लागू करने के लिए उप-क्लास के लिए होगा और उपयुक्त बच्चे को ऐसी सभी कार्यक्षमता को सौंपें, शायद कस्टम ग्रिड पर एक संपत्ति के माध्यम से सेट किया गया अर्थात निम्न की तर्ज पर:

  सार्वजनिक IScrollInfo Scroller {get; सेट; } Bool IScrollInfo.CanHorizontallyScroll {get {return Scroller.CanHorizontallyScroll; } सेट {Scroller.CanHorizontallyScroll = value; }}  

आपको यह देखने की आवश्यकता होगी कि इससे पहले यह ScrollViewer द्वारा उपयोग किया जाता है, इससे पहले कि यह पुनर्निर्देशन पर्याप्त रूप से व्यवस्थित किया जाता है, जो कि एक दर्द हो सकता है।

एक अन्य विकल्प यह ध्यान रखना है कि ScrollViewer में IScrollInfo बच्चे ऑब्जेक्ट को इंगित करने के लिए एक संरक्षित संपत्ति है आप ScrollViewer को उप-वर्ग बना सकते हैं, लेकिन इसे सेट कर सकते हैं, हालांकि यह थोड़ा हैकी दिखता है - मैंने अभी कोशिश की है, और यह स्पष्ट नहीं है कि यह कब सेट करना होगा।

अंत में, आप विचार करें कि कुछ डिज़ाइन समस्या है, कि आपके पास 3 भाई बहन हैं जिनमें से एक दूसरों की तुलना में "अधिक विशेष" है - शायद आपको वास्तव में एक कस्टम पैनल होना चाहिए जिसमें ये बच्चे हैं जो आपके IScrollInfo व्यवहार को परिभाषित करते हैं। / P>

आप जिस शब्द को ScrollOwner का उपयोग करते हैं, उसका ध्यान रखें कि नियंत्रण scrollviewer का संदर्भ देने के लिए IScrollInfo में प्रयुक्त एक अवधारणा पहले से ही है


Comments