टेम्प्लेट बाइंडिंग का उपयोग टेम्प्लेट परिभाषा के भीतर तत्व गुणों के लिए बाध्य करने के लिए किया जाता है। आपके उदाहरण में, आप लिख सकते थे
<Border Padding="{Binding Padding}" ...>
सीमा की पैडिंग प्रॉपर्टी को ... की पैडिंग प्रॉपर्टी से बांधने का मतलब ... क्या? आप कहना चाहेंगे, "इस टेम्पलेट के लिए उपयोग की जा रही नियंत्रण की पैडिंग संपत्ति।" आप इसे एक नाम नहीं दे सकते क्योंकि आप x को नहीं जानते हैं: इस समय नियंत्रण का नाम (भले ही आपने किया हो, यह काम नहीं करेगा क्योंकि इसके अलग नाम में)। हालांकि, आप एक रिश्तेदार स्रोत को परिभाषित करके ऐसा कर सकते हैं
<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>
या टेम्प्लेटबाइंडिंग का उपयोग करें जो ऊपर के लिए एक शॉर्टकट (*) है
<Border Padding="{TemplateBinding Padding}" ...>
(*) इन टेम्प्लेटिंग परिदृश्यों में कम क्रिया होने के अलावा, टेम्पलेटबाइंडिंग में एक नियमित चरण की तुलना में कुछ अंतर हैं:
- इसका संकलन-समय पर मूल्यांकन किया जाता है। (यदि, उदाहरण के लिए, पैडिंग प्रॉपर्टी मौजूद नहीं थी, तो आपको एक कंपाइल एरर मिलेगा। लेकिन अगर आप टेंपलेटेडपैरेंट के साथ बाइंडिंग का उपयोग करते हैं, तो आपको रनटाइम में केवल त्रुटि दिखाई देगी।)
- यह हमेशा एक तरफ़ा बंधन होता है।
- यह आवश्यक है कि स्रोत और लक्ष्य गुण दोनों निर्भरता गुण हैं ।
- इसकी कार्यक्षमता बहुत कम है (कोई StringFormat, Delay, IsAsync, आदि .. बाइंडिंग बनाम टेम्प्लेटबाइंडिंगटेक्शंस के गुण देखें )।