TemplateBinding se utiliza para vincular las propiedades del elemento dentro de la definición de la plantilla. En su ejemplo, podría haber escrito
<Border Padding="{Binding Padding}" ...>
lo que significa unir la propiedad de relleno del borde a la propiedad de relleno de ... ¿qué? Le gustaría decir "propiedad de relleno del control para el que se utiliza esta plantilla". No puede darle un nombre porque no conoce el x: Nombre del control en este momento (incluso si lo supiera, no funcionaría porque está en un ámbito de nombres diferente). Sin embargo, puede hacer esto definiendo una fuente relativa
<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>
o use TemplateBinding que es un atajo (*) para arriba
<Border Padding="{TemplateBinding Padding}" ...>
(*) Además de ser menos detallado en estos escenarios de plantillas, TemplateBinding tiene un par de diferencias en comparación con un enlace normal:
- Se evalúa en tiempo de compilación. (Si, por ejemplo, la propiedad Padding no existiera, obtendría un error de compilación. Pero si usara un enlace con TemplatedParent, solo vería el error en tiempo de ejecución).
- Siempre es un enlace unidireccional.
- Requiere que tanto las propiedades de origen como de destino sean propiedades de dependencia .
- Tiene mucha menos funcionalidad (sin StringFormat, Delay, IsAsync, etc. vea las propiedades de Binding vs TemplateBindingExtention ).