2008-10-01 13 views
28

आप डब्ल्यूपीएफ में अपेक्षाकृत तत्वों की स्थिति कैसे बना सकते हैं? मानक मॉडल सब कुछ के लिए लेआउट प्रबंधकों का उपयोग करना है, लेकिन यदि आप अन्य तत्वों की स्थिति के आधार पर तत्वों (कैनवास पर, उदाहरण के लिए) को स्थिति में रखना चाहते हैं तो क्या होगा?आप WPF में सापेक्ष स्थिति कैसे करते हैं?

उदाहरण के लिए, आप एक तत्व (एक बटन कहें) को उस पैनल की स्थिति या लेआउट से स्वतंत्र किसी अन्य (शायद एक पैनल) के पक्ष से जोड़ा जा सकता है। कोई भी जो इंजीनियरिंग उपकरण (सॉलिडवर्क्स, ऑटोकैड इत्यादि) के साथ काम करता है, इस प्रकार की रिश्तेदार स्थिति से परिचित है।

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

+0

मुझे यकीन नहीं है कि मैं इस सवाल को पूरी तरह से समझता हूं। क्या आप एक स्क्रीन लेआउट का उदाहरण दे सकते हैं जिसे आप विश्वास नहीं करते हैं कि डब्ल्यूपीएफ मॉडल के साथ हासिल किया जा सकता है? –

+0

मैं मानता हूं, सवाल भ्रमित है ... ऐसा लगता है कि एक साधारण स्टैकपैनल चाल करेगा। – cplotts

+2

मुझे नहीं लगता कि यह भ्रमित है, और एक स्टैकपैनल केवल मामलों के सबसे सरल को संभालेगा। वह क्या चाहता है एंड्रॉइड में रिलेवेटिवआउट के बराबर है। – user316117

उत्तर

10

अच्छा सवाल। जहां तक ​​मुझे पता है, इस सुविधा को पाने के लिए हमें एक अलग कस्टम पैनल होना चाहिए। चूंकि डब्ल्यूपीएफ विजुअल पदानुक्रम पर आधारित है, इसलिए मंच में तत्वों के लिए इस तरह के फ्लैट संरचना का कोई तरीका नहीं है।

लेकिन यह करने के लिए यहां एक चाल है। अपने तत्वों को एक ही स्थिति में रखें और RenderTransform.TranslateTransform का उपयोग कर रिश्तेदार विस्थापन दें। इस प्रकार आपका अनुवाद ट्रान्सफ्रम एक्स और वाई हमेशा दूसरे तत्व से संबंधित होगा।

+0

धन्यवाद इसके लिए धन्यवाद। एक आकर्षण काम किया। –

+0

क्या आप कुछ कोड पोस्ट कर सकते हैं? – user844541

+0

_ "डब्ल्यूपीएफ विजुअल पदानुक्रम पर आधारित है, कोई रास्ता नहीं है" _ - यह WPF के पहले संस्करणों के बाद से गलत है। संदर्भ के लिए 'ग्रिड' देखें। – Gusdor

13

कैनवास पर सीधे एक बटन डालने के बजाय, आप कैनवास पर एक स्टैक्पेनल डाल सकते हैं, क्षैतिज रूप से गठबंधन कर सकते हैं, और वहां दो बटन डाल सकते हैं।

तो जैसा

:

<Canvas> 
    <StackPanel Canvas.Left="100" Canvas.Top="100" Orientation="Horizontal"> 
    <Button>Button 1</Button><Button>Button 2</Button> 
    </StackPanel> 
</Canvas> 

alt text

मुझे लगता है कि यह काफी लचीला है जब आप एक रूप में 1 से अधिक लेआउट का उपयोग, और आप काफी किसी भी विन्यास आप चाहते हैं बना सकते हैं।

+0

जॉबी जॉय से एक के साथ इस सुझाव को जोड़ना मुझे लगता है कि एक कार्यवाही होगी: आप एक कैनवास के अंदर एक स्टैकपैन डाल देंगे और तत्वों के बीच दूरी समायोजित करने के लिए अनुवाद ट्रान्सफॉर्म का उपयोग करेंगे। – ArthurT

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