Qual é a diferença entre essas 2 ligações:
<ControlTemplate TargetType="{x:Type Button}">
<Border BorderBrush="{TemplateBinding Property=Background}">
<ContentPresenter />
</Border>
</ControlTemplate>
e
<ControlTemplate TargetType="{x:Type Button}">
<Border BorderBrush="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}">
<ContentPresenter />
</Border>
</ControlTemplate>
?
wpf
relativesource
templatebinding
PaN1C_Showt1Me
fonte
fonte
Respostas:
TemplateBinding não é exatamente a mesma coisa. Os documentos do MSDN geralmente são escritos por pessoas que precisam testar SDEs monossilábicas sobre recursos de software, de modo que as nuances não estão certas.
TemplateBindings são avaliadas em tempo de compilação com relação ao tipo especificado no modelo de controle. Isso permite uma instanciação muito mais rápida dos modelos compilados. Apenas atrapalhe o nome em uma ligação de modelo e você verá que o compilador o sinalizará.
A marcação de ligação é resolvida no tempo de execução. Embora a execução seja mais lenta, a ligação resolverá os nomes de propriedades que não são visíveis no tipo declarado pelo modelo. Mais devagar, mostrarei que esse tipo de parente já que a operação de ligação ocupa muito pouco da CPU do aplicativo. Se você usasse modelos de controle em alta velocidade, talvez notasse.
Por uma questão de prática, use o TemplateBinding quando puder, mas não tenha medo do Binding.
fonte
TemplateBinding - Mais limitante do que usar Binding normal
Ligação Regular - Não possui as limitações acima de TemplateBinding
fonte
Mais uma coisa - TemplateBindings não permite a conversão de valor. Eles não permitem que você passe um conversor e não converte automaticamente int para string, por exemplo (o que é normal para uma ligação).
fonte
TemplateBinding é uma abreviação de Binding with TemplatedParent, mas não expõe todos os recursos da classe Binding, por exemplo, você não pode controlar Binding.Mode de TemplateBinding.
fonte
Eu pensei que TemplateBinding não suporta tipos Freezable (que incluem objetos de pincel). Para contornar o problema. Pode-se fazer uso do TemplatedParent
fonte
Eles são usados de maneira semelhante, mas eles têm algumas diferenças. Aqui está um link para a documentação do TemplateBinding: http://msdn.microsoft.com/en-us/library/ms742882.aspx
fonte