Quelle est la différence entre ces 2 fixations:
<ControlTemplate TargetType="{x:Type Button}">
<Border BorderBrush="{TemplateBinding Property=Background}">
<ContentPresenter />
</Border>
</ControlTemplate>
et
<ControlTemplate TargetType="{x:Type Button}">
<Border BorderBrush="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}">
<ContentPresenter />
</Border>
</ControlTemplate>
?
wpf
relativesource
templatebinding
PaN1C_Showt1Me
la source
la source
Réponses:
TemplateBinding n'est pas tout à fait la même chose. Les documents MSDN sont souvent rédigés par des personnes qui doivent interroger les SDE monosyllabiques sur les fonctionnalités du logiciel, de sorte que les nuances ne sont pas tout à fait exactes.
Les TemplateBindings sont évalués au moment de la compilation par rapport au type spécifié dans le modèle de contrôle. Cela permet une instanciation beaucoup plus rapide des modèles compilés. Il suffit de fouiller le nom dans une liaison de modèle et vous verrez que le compilateur le marquera.
Le balisage de liaison est résolu au moment de l'exécution. Bien que plus lente à s'exécuter, la liaison résoudra les noms de propriété qui ne sont pas visibles sur le type déclaré par le modèle. En plus lent, je ferai remarquer que son genre de relatif puisque l'opération de liaison prend très peu de CPU de l'application. Si vous utilisiez des modèles de contrôle à grande vitesse, vous le remarquerez peut-être.
En pratique, utilisez le TemplateBinding lorsque vous pouvez mais ne craignez pas le Binding.
la source
TemplateBinding - Plus limitatif que l'utilisation de la liaison régulière
Reliure régulière - N'a pas les limitations ci-dessus de TemplateBinding
la source
Encore une chose: les TemplateBindings ne permettent pas la conversion de valeur. Ils ne vous permettent pas de passer un convertisseur et ne convertissent pas automatiquement int en chaîne par exemple (ce qui est normal pour une liaison).
la source
TemplateBinding est un raccourci pour Binding avec TemplatedParent mais il n'expose pas toutes les fonctionnalités de la classe Binding, par exemple vous ne pouvez pas contrôler Binding.Mode à partir de TemplateBinding.
la source
Je pensais que TemplateBinding ne prend pas en charge les types Freezable (qui comprend les objets pinceau). Pour contourner le problème. On peut utiliser TemplatedParent
la source
Ils sont utilisés de la même manière mais présentent quelques différences. Voici un lien vers la documentation TemplateBinding: http://msdn.microsoft.com/en-us/library/ms742882.aspx
la source