2012-03-13 18 views
7

इस तरह की कुछ XAML के साथ:एडॉर्नर डिकोरेटर - इससे कोई फर्क नहीं पड़ता कि उन्हें कहां रखा गया है?

<Grid Name="grid"> 
     <AdornerDecorator> 
     <TextBox Height="23" HorizontalAlignment="Left" Name="textBox1" Width="120" /> 
     </AdornerDecorator> 
</Grid> 

WPF स्नूप उपयोगिता को इंगित करता है textBox1 AdornerDecorator का एक बच्चा है (आप उम्मीद करेंगे के रूप में), लेकिन यह भी है कि उस AdornerLayer AdornerDecorator बनाता भी एक बच्चा है। जैसा कि एडॉर्नरलेयर में जोड़ा गया एक कस्टम एडोर्नर टेक्स्टबॉक्स के बाहर 'बाहर' प्रदर्शित किया जा सकता है, एडॉर्नरलेयर की ड्राइंग सतह को बाहर भी खिंचाव करना चाहिए (संभवतः सभी खिड़की पर)।

तो, एडॉर्नर डिकोरेटर के प्लेसमेंट का वास्तविक महत्व क्या है (क्या हमने कस्टम एडोर्नर को यूआई तत्व बांध दिया है, जिसे हम एडॉर्नरलेयर में रखते हैं)? मुझे पता है कि AdornerLayer.GetAdorner (टेक्स्टबॉक्स 1) को टेक्स्टबॉक्स 1 से दृश्य पेड़ में पहली सजावट परत मिल जाएगी, लेकिन यह कहां मायने रखता है (जैसा कि कस्टम ardorner परत में जोड़ा जाता है और कस्टम ardoner जानता है कि यह कौन सा तत्व बाध्य है सेवा मेरे)?

+0

आप एडॉर्नर डिकोरेटर के प्लेसमेंट के महत्व को देखने के लिए मेरी समस्या देख सकते हैं। http://stackoverflow.com/questions/11477518/custom-validation-error-template-not-respecting-zindex/11523246#11523246 – Thelonias

उत्तर

20

संक्षिप्त उत्तर यह है कि जब आप अन्य नियंत्रणों (ज़ेड-इंडेक्स विमान में) को ओवरलैप करते हैं, तो आप इससे निपटने लगते हैं और आप इस बात पर ध्यान देते हैं कि ओवरलैपिंग नियंत्रण के शीर्ष पर कोई विशेष एडॉर्नर परत दिखाई देती है या नहीं। उदाहरण के लिए, जब आप ErrorTemplate का उपयोग करते हैं, तो इसकी सामग्री एक एडोर्नर परत में प्रस्तुत की जाती है और यदि आप अपने ऐप में <AdornerDecorator> नहीं देते हैं (जिसका अर्थ है कि आप केवल अधिकांश विंडो टेम्पलेट्स द्वारा प्रदान किए गए किसी का उपयोग करते हैं), तो आप समाप्त कर सकते हैं this हो रहा है।

<AdornerDecorator> जहां हम चाहते हैं, रखकर हम नियंत्रित कर सकते हैं कि यह ओवरलैपिंग कैसे व्यवहार करती है।

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

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