2013-10-08 8 views
41

MSDN पर x:Reference Markup Extension पृष्ठ के अनुसार, x:Referenceएक्स: संदर्भ और एलिमेंटनाम के बीच क्या अंतर है?

संदर्भ एक उदाहरण है कि XAML मार्कअप में कहीं घोषित किया जाता है। संदर्भ किसी तत्व के x: नाम को संदर्भित करता है।

MSDN पर Binding.ElementName Property पेज के अनुसार

, ElementName

नाम संपत्ति या एक्स का मान: ब्याज के तत्व का नाम निर्देशक।

एक्स:

पहले पृष्ठ पर टिप्पणी अनुभाग में वापस देख रहे हैं संदर्भ और WPF

WPF और XAML 2006 में, तत्व संदर्भ ढांचे स्तरीय सुविधा से संबोधित कर रहे हैं ElementName बाध्यकारी का। अधिकांश WPF अनुप्रयोगों और परिदृश्यों के लिए, ElementName बाध्यकारी अभी भी उपयोग किया जाना चाहिए। इस सामान्य मार्गदर्शन के अपवादों में उन मामलों को शामिल किया जा सकता है जहां डेटा संदर्भ या अन्य स्कोपिंग विचार हैं जो डेटा बाध्यकारी अव्यवहारिक बनाते हैं और जहां मार्कअप संकलन शामिल नहीं है।

यह गुण उपयोगी होता है जब आप अपने आवेदन में एक और तत्व की संपत्ति के लिए बाध्य करना चाहते हैं:

पूर्णता के लिए, यहाँ ElementName पृष्ठ पर टिप्पणी अनुभाग का हिस्सा है। उदाहरण के लिए, यदि आप अपने आवेदन में किसी अन्य नियंत्रण की ऊंचाई को नियंत्रित करने के लिए स्लाइडर का उपयोग करना चाहते हैं, या यदि आप अपने नियंत्रण बॉक्स की सामग्री को अपने सूची बॉक्स की चयनित वैल्यू प्रॉपर्टी पर बाध्य करना चाहते हैं।

अब

, जबकि मैं कब और कैसे ElementName संपत्ति का उपयोग करने से पूरी तरह वाकिफ हूँ, मैं पूरी तरह से इसे और x:Reference मार्कअप विस्तार के बीच का अंतर समझ में नहीं आता। किसी को भी यह समझाने कृपया कर सकते हैं और विशेष रूप से, x:Reference टिप्पणी अनुभाग ?: इस सामान्य मार्गदर्शन करने के लिए

अपवाद से पता चला अंतिम वाक्य पर विस्तार मामलों में जहां डेटा संदर्भ या अन्य scoping विचार हैं जिनका डेटा अव्यावहारिक बाध्यकारी बनाने के देखते हैं शामिल हो सकता है और जहां मार्कअप संकलन शामिल नहीं है।

उत्तर

48

असल में जैसे आपने कहा कि वे दोनों लगभग समान हैं। हालांकि हुड को अलग करने में छोटे मतभेद हैं।

{x:Reference ...} -> केवल उस वस्तु का संदर्भ देता है जो बाध्यकारी जैसे दो गुणों के बीच "पुल" नहीं बनाता है। एक सेवा का उपयोग किया जा रहा है, उसके पीछे एक विशिष्ट दायरे में दिए गए नाम की खोज करता है जो आम तौर पर खिड़की स्वयं होता है।

{Binding ElementName="..." } -> सबसे पहले यह उस बाध्यकारी वस्तु को बनाता है, फिर यह ऑब्जेक्ट नाम की खोज करता है लेकिन हुड के तहत उसी तकनीक का उपयोग करके एक्स: संदर्भ के रूप में नहीं। वांछित तत्व खोजने के लिए खोज एल्गोरिदम VisualTree में ऊपर और/या नीचे चला जाता है। इसलिए एक कार्यात्मक VisualTree हमेशा की जरूरत है। उदाहरण के लिए जब गैर-यूआईएलमेंट के अंदर उपयोग किया जाता है, तो यह काम नहीं करेगा। अंत में बाध्यकारी रहता है और इसकी दैनिक रोटी करता है।

यह काम करेगा नहीं:

<StackPanel> 
<Button x:name="bttn1" Visibility="Hidden">Click me</Button> 
<DataGrid> 
    <DataGrid.Columns> 
    <DataGridTextColumn Visibility="{Binding ElementName=bttn1, Path=DataContext.Visibility}"/> 
.... 

यह काम करता है:

<StackPanel> 
<Button x:name="bttn1" Visibility="Hidden">Click me</Button> 
<DataGrid> 
    <DataGrid.Columns> 
    <DataGridTextColumn Visibility="{Binding Source={x:Reference bttn1}, Path=DataContext.Visibility}"/> 
.... 

क्रमबद्ध उस तरह की :)

+1

तो मुख्य अंतर इस बात से संबंधित है कि नियंत्रण 'UIElement' है या नहीं? – Sheridan

+10

+1। वैसे, क्या आपके पास इस जानकारी का स्रोत है, या यह अनुभव से ही है? एक बात जिसका उल्लेख यहां नहीं किया गया था, यह है कि कोई बच्चा अपने माता-पिता को संदर्भित नहीं कर सकता है (यह संबंध दृश्य वृक्ष के बजाय संदर्भ पर निर्भर करता है) क्योंकि यह एक परिपत्र संदर्भ समस्या का कारण बनता है। कभी-कभी संदर्भ कुछ अन्य रहस्यमय मुद्दों के कारण हल करने में भी असफल हो जाता है। – GregRos

+0

इस जानकारी का स्रोत स्रोत कोड ही है :) –

0

ElementName मंच विशिष्ट है। अर्थात। आप जिस प्लेटफ़ॉर्म का उपयोग कर रहे हैं उसके आधार पर यह मौजूद हो सकता है या नहीं भी हो सकता है। एक्स: संदर्भ उस अवधारणा को XAML मूल सुविधा में बढ़ाता है। इस प्रकार XAML का समर्थन करने वाला कोई भी प्लेट x का समर्थन करता है: संदर्भ।

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