Extensão de marcação TemplateBinding

Vincula o valor de uma propriedade em um modelo de controle para ser o valor de outra propriedade no controle personalizado.

Uso do Atributo XAML

<object property="{TemplateBinding sourceProperty}" ... />

Uso do Atributo XAML (para propriedade Setter em um modelo ou estilo)

<Setter Property="propertyName" Value="{TemplateBinding sourceProperty}" ... />  

Valores XAML

Valor Descrição
propertyName DependencyProperty.Name da propriedade sendo definida na sintaxe setter.
sourceProperty Outra propriedade de dependência que existe no tipo que está sendo personalizado, especificada por DependencyProperty.Name.

- ou -

Um nome de propriedade "pontilhado" definido por um tipo diferente do tipo de destino sendo personalizado. Isso é, na verdade, um PropertyPath. Consulte Sintaxe XAML de PropertyPath.

Comentários

A TemplateBinding é uma forma otimizada de um Binding para cenários de modelo, análoga a um Binding construído com {Binding RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}. Um TemplateBinding é sempre uma associação unidirecional, mesmo se as propriedades envolverem associação bidirecional padrão. Ambas as propriedades envolvidas devem ser propriedades de dependência. Para obter a vinculação bidirecional a um pai modelo, use a seguinte instrução de vinculação em vez disso {Binding RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, Path=MyDependencyProperty}.

RelativeSource é outra extensão de marcação que às vezes é usada em conjunto com ou em vez de para executar a vinculação de propriedade relativa dentro de TemplateBinding um modelo.

A descrição de modelos de controle como um conceito não é abordada aqui; para obter mais informações, consulte Estilos e modelos de controle.

A sintaxe de atributo é a sintaxe mais comum usada com essa extensão de marcação. O token da cadeia de caracteres fornecido após a cadeia de caracteres identificadora TemplateBinding é atribuído como o valor Property da classe de extensão subjacente TemplateBindingExtension.

A sintaxe do elemento de objeto é possível, mas não é exibida pois não tem aplicativo realístico. TemplateBinding é usado para preencher os valores dos setters usando expressões avaliadas. Usar a sintaxe do elemento de objeto TemplateBinding para preencher a sintaxe do elemento de propriedade <Setter.Property> é desnecessariamente detalhado.

TemplateBinding também pode ser usado em um atributo detalhado que especifica a propriedade Property como sendo o par propriedade=valor:

<object property="{TemplateBinding Property=sourceProperty}" ... />

O uso detalhado geralmente é útil para as extensões que têm mais de uma propriedade configurável, ou caso algumas propriedades sejam opcionais. Como TemplateBinding tem apenas uma propriedade configurável, que é necessária, esse uso detalhado não é típico.

Na implementação do processador XAML do WPF, o tratamento para essa extensão de marcação é definido pela TemplateBindingExtension classe.

TemplateBinding é uma extensão da marcação. Extensões de marcação são tipicamente implementadas quando existe um requisito que permite que valores de atributo sejam diferentes de valores literais ou nomes de manipuladores, e o requisito é mais global do que simplesmente colocar conversores de tipo em certos tipos ou propriedades. Todas as extensões de marcação em XAML usam os caracteres { e } na sintaxe de atributo, que é a convenção pela qual o processador XAML reconhece que uma extensão de marcação precisa processar o atributo. Para obter mais informações, consulte Extensões de marcação e XAML do WPF.

Confira também