Je ne pouvais pas comprendre BorderThickness="{TemplateBinding BorderThickness}
. Voici le code:
<ControlTemplate TargetType="{x:Type wpftoolkit:DataGridCell}">
<Border Padding="{TemplateBinding Padding}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
Veuillez également expliquer d'autres types de reliure.
TemplateBinding est utilisé pour la liaison aux propriétés de l'élément dans la définition du modèle. Dans votre exemple, vous auriez pu écrire
<Border Padding="{Binding Padding}" ...>
signifie lier la propriété de remplissage de la bordure à la propriété de ... quoi? Vous voudriez dire, "propriété de remplissage du contrôle que cela le modèle est utilisé pour. " Vous ne pouvez pas lui donner un nom parce que vous ne connaissez pas le x: Nom du contrôle pour le moment (même si vous le saviez, cela ne fonctionnerait pas car son nom est différent). Cependant, vous pouvez le faire en définissant une source relative
<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>
ou utilisez TemplateBinding, qui est un raccourci (*) pour ce qui précède
<Border Padding="{TemplateBinding Padding}" ...>
(*) En plus d'être moins explicite dans ces scénarios de templates, TemplateBinding présente quelques différences par rapport à une liaison classique:
Une image vaut 1000 mots. Dans ce cas, il s’agit d’une vidéo de 7 minutes: https://www.youtube.com/watch?v=z-0TZR-7xLI
EDIT: Exemple:
Button
a une propriété par défaut ControlTemplate
et une propriété Height
ControlTemplate
d'une Button
en écrivant votre propre (par exemple, vous voulez créer un bouton ressemblant à Ellipse
au lieu de Rectangle
à regarder)Ellipse
dans votre nouveau ControlTemplate
, vous souhaitez que Ellipse
ait la même taille que la propriété Height
du bouton original.TemplateBinding
pour référencer Button
Height
sans le nommer Eren Ersönmenz l'a déjà très bien expliqué, mais j'aimerais lui donner une autre perspective pour mieux comprendre le concept.
Dans WPF, chaque contrôle est plus ou moins détaché de sa présentation. Vous pouvez toujours changer le modèle de contrôles et le rendre complètement différent. Un bouton fonctionne comme prévu avec un ControlTemplate
composé uniquement de Rectangle
par exemple. Maintenant, il est parfois nécessaire que ControlTemplate
utilise réellement les propriétés de la partie logique d'un contrôle. Et c’est ce à quoi TemplateBinding
correspond, car il indique simplement à ControlTemplate
"Utiliser cette propriété du contrôle que nous donnons à la présentation visuelle". Un bon exemple est la propriété Background
sur chaque contrôle, elle n’a aucune signification en elle-même, elle tire son sens de TemplateBinding
-le en contrôle enfant dans le ControlTemplate
.
La liaison seule est très bien décrite dans le MSDN . This est un très bel aide-mémoire accroché sur mon mur juste à côté de moi. Cela donne un bon aperçu de toutes les différentes reliures disponibles.
De TemplateBinding Markup Extension , TemplateBinding
lie la valeur d'une propriété d'un modèle de contrôle à la valeur d'une autre propriété exposée du contrôle basé sur un modèle. En d'autres termes, il s'agit de valeurs de liaison dans un modèle.
Binding connecte une propriété des cibles de liaison et des sources de données.