TemplateBinding ใช้สำหรับการเชื่อมโยงกับคุณสมบัติองค์ประกอบภายในข้อกำหนดเทมเพลต ในตัวอย่างของคุณคุณสามารถเขียนได้
<Border Padding="{Binding Padding}" ...>
หมายถึงการผูกคุณสมบัติช่องว่างของเส้นขอบกับคุณสมบัติช่องว่างของ ... อะไร? คุณต้องการพูดว่า "คุณสมบัติการเติมของตัวควบคุมที่กำลังใช้เทมเพลตนี้" คุณไม่สามารถตั้งชื่อได้เนื่องจากคุณไม่ทราบ x: ชื่อของคอนโทรลในขณะนี้ (แม้ว่าคุณจะทำ แต่ก็ไม่สามารถใช้งานได้เนื่องจากอยู่ในเนมสโคปที่แตกต่างกัน) อย่างไรก็ตามคุณสามารถทำได้โดยกำหนดแหล่งที่มาสัมพัทธ์
<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>
หรือใช้ TemplateBinding ซึ่งเป็นทางลัด (*) สำหรับด้านบน
<Border Padding="{TemplateBinding Padding}" ...>
(*) นอกจากจะมีรายละเอียดน้อยลงในสถานการณ์จำลองเหล่านี้แล้ว TemplateBinding ยังมีข้อแตกต่างอีกสองสามประการเมื่อเทียบกับการเชื่อมโยงทั่วไป:
- ได้รับการประเมินตามเวลาคอมไพล์ (ตัวอย่างเช่นหากไม่มีคุณสมบัติ Padding คุณจะได้รับข้อผิดพลาดในการคอมไพล์ แต่ถ้าคุณจะใช้การรวมกับ TemplatedParent คุณจะเห็นข้อผิดพลาดขณะรันไทม์เท่านั้น)
- เป็นการผูกแบบทางเดียวเสมอ
- มันต้องมีทั้งแหล่งที่มาและเป้าหมายคุณสมบัติมีคุณสมบัติการพึ่งพา
- มีฟังก์ชันการทำงานน้อยกว่ามาก (ไม่มี StringFormat, Delay, IsAsync ฯลฯ ดูคุณสมบัติของBinding vs TemplateBindingExtention )