wpf - मुझे श्रोताओं का उपयोग कब करना चाहिए?



adorner (1)

WPF महान है क्योंकि आपके लक्ष्यों को प्राप्त करने के कई तरीके हैं। उदाहरण के लिए, जो मैं समझता हूं, उसमें से एक UI तत्व में कुछ नियंत्रण जोड़ सकते हैं, लेकिन मुझे लगता है कि कस्टम नियंत्रण के माध्यम से वही व्यवहार प्राप्त किया जा सकता है जिसमें अतिरिक्त तत्व शामिल हैं।

तो, मेरा सवाल यह है: मुझे कब अधिक जटिल (लेकिन मुझे लगता है, अधिक लचीला) कस्टम नियंत्रण के लिए श्रोताओं को पसंद करना चाहिए? कृपया विचार करें कि मैं बड़े पैमाने पर MVVM पैटर्न का उपयोग कर रहा हूं और मैं अतिरिक्त तत्व के लिए कमांड को बांधना चाहूंगा।

विशेष रूप से, मैं एक आरेख डिजाइनर एप्लिकेशन डिज़ाइन कर रहा हूं और मैं अपने आकृतियों में कनेक्शन बिंदु जोड़ना चाहूंगा। एक अन्य उदाहरण जहां मुझे एक कस्टम नियंत्रण और एडोर्नर के बीच तय करना चाहिए वह एक लाइन है जो एक लेबल को स्वचालित रूप से लाइन को "फॉलो" करने के लिए तैनात दिखाता है।

धन्यवाद


अधिकांश प्रयोजनों के लिए कंट्रोलटेम्पर्स का उपयोग करने की तुलना में एडोर्नर्स को थोड़ा अधिक काम करने की आवश्यकता होती है। यदि आप चाहते हैं कि अतिरिक्त कार्यक्षमता जो एडोर्नर्स प्रदान करें, उनका उपयोग करें। अन्यथा ControlTemplates का उपयोग करें।

यहां मुख्य विशेषताएं हैं जो एडोर्नर्स टेबल पर लाती हैं:

  1. क्योंकि एडोर्नर्स एक अलग परत पर हैं, दृश्य एडर्न किए गए तत्व से आगे बढ़ सकते हैं, भले ही एडर्न किए गए तत्व को क्लिप किया गया हो।
  2. क्योंकि एडोर्नर्स एक अलग परत पर हैं, वे आमतौर पर एडोर्नडिमेंट के कंटेनर द्वारा या सिबलिंग नियंत्रण द्वारा अस्पष्ट नहीं होते हैं।
  3. श्रोताओं को स्वचालित रूप से सुशोभित तत्व के आकार और स्थान में सभी परिवर्तनों के बारे में सूचित किया जाता है, लेआउट परिवर्तनों की प्रतिक्रियाओं की अनुमति देता है जो आसानी से साधारण नियंत्रणों के साथ प्राप्त नहीं होते हैं।
  4. अलंकरणों को पैनल में और मौजूदा नियंत्रणों पर उनके टेम्पलेट में बदलाव किए बिना या अन्यथा लागू किया जा सकता है। यह उन्हें मनमाने ढंग से नियंत्रण पर हेरफेर हैंडल या दृश्य प्रतिक्रिया प्रदान करने के लिए अच्छा बनाता है।
  5. कई परिदृश्यों में आप सैकड़ों या हजारों में से कुछ "सक्रिय" वस्तुओं के लिए ही श्रंगार करेंगे। ControlTemplates का उपयोग करके समान कार्यक्षमता को लागू करना नाटकीय रूप से कम कुशल हो सकता है यदि आपको टेम्पलेट में एक अतिरिक्त पैनल जोड़ना है: टेम्पलेट के प्रत्येक एकल इंस्टालेशन में अतिरिक्त पैनल होगा, जबकि बस एक एडोर्न होगा।

यहाँ कुछ संभावित लागतों का उपयोग करने से जुड़े हैं जैसे कि ControlTemplates के विपरीत:

  1. आपको कॉल करने के लिए कोड लिखना होगा। .GetAdornerLayer() और .Add() और .Add() के जीवनकाल को प्रबंधित करने के लिए
  2. आपको या तो अपने एडोर्नर के लिए रेंडरिंग कोड लिखना होगा या एडोर्न के बच्चे के रूप में एक Control शामिल करने के लिए कोड जोड़ना होगा ताकि आप इसके साथ एक कंट्रोलटेम्पलेट का उपयोग कर सकें
  3. आप आम तौर पर कोड में अपनी कस्टम माप / गणना की व्यवस्था करेंगे (जब तक कि आप अपने एडोनर के भीतर एक कंट्रोलटेम्पलेट का उपयोग नहीं कर रहे हैं)
  4. यदि आप चाहते हैं कि उन्हें लक्ष्य नियंत्रण द्वारा नियंत्रित किया जाए, तो आपको राउटएडवे को फॉरवर्ड करना होगा
  5. यदि आप DataContext को लाना चाहते हैं, तो आपको एक DataContext="{Binding AdornedElement.DataContext}" जोड़ना होगा।
  6. ऐसा प्रतीत होता है कि दिखाई देने वाला एडोर्नर हर लेआउट पास पर स्कैन किया गया है, इसलिए एक ही बार में कई हजारों एडोर्न्स ऑनस्क्रीन दिखाई पड़ सकते हैं। (साधारण दृश्यों में केवल उनका माप / व्यवस्था कोड होता है, जिसे तब कुछ कहा जाता है जो सीधे उन्हें प्रभावित करता है।)
  7. 144 से अधिक श्रोताओं का समर्थन नहीं किया जाता है , इसलिए इस सीमा के करीब होने का कोई भी जोखिम होने पर नियंत्रण टेम्पलेट अधिक उपयुक्त होते हैं।

आपके विशेष उदाहरणों में, कोई स्पष्ट-सही उत्तर नहीं हैं।

  • मैं कनेक्शन बिंदुओं के लिए ControlTemplate का उपयोग करने की ओर झुकूंगा क्योंकि आप संभवतः कनेक्शन बिंदुओं के स्थानों को निर्दिष्ट करने के लिए एक तरीके की आवश्यकता होगी, और ControlTemplate पहले से ही लेआउट को आइटम को परिभाषित कर रहा है। दूसरी ओर, यदि कनेक्शन बिंदु की जानकारी डेटा-चालित है और केवल सक्रिय नियंत्रण (या नियंत्रण को ऊपर खींचा जा रहा है) पर दिखाई देता है, तो प्रदर्शन लाभ पाने के लिए और व्यक्तिगत कंट्रोलटेम्पलेट को सरल बनाने के लिए एडोर्नर्स का उपयोग करना बेहतर होगा।

  • एक स्वचालित रूप से तैनात लेबल एक मापक से देखने के लिए एक अच्छा फिट हो सकता है / गणना बिंदु देखने की व्यवस्था करें यदि लाइनें कुछ भी हैं लेकिन सरल सीधी रेखाएं हैं, लेकिन अगर आपके पास संभावित रूप से इनमें से दस हजार एक बार में प्रदर्शन के बारे में चिंतित होंगे ।

आपके आवेदन के बारे में अधिक जानकारी के बिना इससे अधिक कहना कठिन है।





adorner