TemplateBinding se utiliza para vincular las propiedades del elemento dentro de la definición de la plantilla. En su ejemplo, se podría haber escrito
<Border Padding="{Binding Padding}" ...>
sentido a unirse propiedad padding de la frontera a la propiedad padding de ... ¿qué? Le gustaría decir "propiedad de relleno del control para el que se está utilizando esta plantilla". No puede darle un nombre porque no conoce la x: nombre del control en este momento (incluso si lo hizo, no funcionaría porque está en un namescope diferente). Sin embargo, puede hacer esto mediante la definición de una fuente relativa
<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>
o utilizar TemplateBinding que es un acceso directo (*) 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 regular:
- Se evalúa en tiempo de compilación. (si, por ejemplo, la propiedad de relleno no existiera, obtendría un error de compilación. Pero si utilizara un enlace con TemplatedParent, solo vería el error en tiempo de ejecución.)
- Siempre es una manera vinculante.
- Requiere que las propiedades de origen y destino sean propiedades de dependencia.
- Tiene mucha menos funcionalidad (sin StringFormat, Delay, IsAsync, etc. vea las propiedades de Binding contra TemplateBindingExtention).
qué este retorno y por qué BorderThickness escribe dos veces "" "BorderThickness =" {TemplateBinding BorderThickness} "" " – prjndhi
@Eurético esta página parece ser el primer resultado de google para esa consulta. ;) – ANeves