2009-10-12 10 views
9

मैं एक डिजाइनर लिख रहा हूं जो उपयोगकर्ता को स्क्रीन के चारों ओर नियंत्रण खींचने में सक्षम बनाता है। यह पता लगाने का सबसे अच्छा तरीका क्या होगा कि नियंत्रण एक और नियंत्रण ओवरलैप कर रहा है, जबकि मैं एक नियंत्रण को खींच रहा हूं?मैं कैसे जांच सकता हूं कि 2 नियंत्रण WPF में कैनवास पर एक दूसरे को ओवरलैप करते हैं या नहीं?

क्या मुझे केवल फ्रेमवर्क एलिमेंट के आयाम प्राप्त करना चाहिए और अन्य तत्वों के आयामों को जांचना जारी रखना चाहिए?

धन्यवाद। एली

+1

आप जानना चाहते हैं, तो बाउंडिंग आयतों ओवरलैप करते हैं, या दिखाई क्षेत्रों का उपयोग कर सकते हैं? उदाहरण के लिए, दो अंडाकारों में बाध्य आयत को ओवरलैप करना पड़ सकता है, लेकिन वास्तविक इलिप्स शायद स्पर्श भी नहीं कर सकते हैं। –

उत्तर

4

वे हमेशा से रहे हैं, तो आयताकार आयाम (FrameworkElement.ActualWidth FrameworkElement.ActualHeight) और स्थिति को (Canvas.Top, Canvas.Bottom, Canvas.Left, Canvas.Right) अपने तत्वों की पर्याप्त होगा। उस स्थिति में यदि आप दो आयताकार ओवरलैप करते हैं तो आप आसानी से गणना कर सकते हैं। यदि आप तत्व अधिक जटिल आकार के हो सकते हैं तो यह बालों वाली हो जाता है। मुझे नहीं पता कि क्या मैं डब्ल्यूपीएफ में दो विजुअल उदाहरणों के चौराहे के लिए परीक्षण कर सकता हूं।

शायद हम hittesting का उपयोग कर सकते हैं? इस दृष्टिकोण के साथ आप कम से कम परीक्षण कर सकते हैं यदि एक निश्चित point या geometry एक प्रमाणित दृश्य के साथ छेड़छाड़ करता है। तो आपको एक ज्यामिति या उन बिंदुओं की एक सूची को परिभाषित करना होगा जो आपके दूसरे दृश्य की सीमाओं से अधिक या कम निकटता से मेल खाते हैं।

17

आप Rect.IntersectsWith विधि

+1

विनरेट मेट्रो ऐप के लिए, Rect.Intersect भी है जो कोई छेड़छाड़ नहीं करेगा, और कोई वास्तविक परिणाम होने पर वास्तविक आयत देगा। –

+1

टीक्स डेन! मैं WinRT के लिए इसकी तलाश कर रहा था। – andrecarlucci

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

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