Extension de balisage {TemplateBinding}

Lie la valeur d’une propriété dans un modèle de contrôle à la valeur d’une autre propriété exposée sur le contrôle basé sur un modèle. TemplateBinding ne peut être utilisé que dans une définition ControlTemplate en XAML.

Utilisation des attributs XAML

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

Utilisation des attributs XAML (pour la propriété Setter dans un modèle ou style)

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

Valeurs XAML

Terme Description
propertyName Nom de la propriété définie dans la syntaxe de la méthode setter. Il doit s’agir d’une propriété de dépendance.
sourceProperty Nom d’une autre propriété de dépendance qui existe sur le type qui est basé sur un modèle.

Remarques

L’utilisation de TemplateBinding est un élément fondamental de la définition d’un modèle de contrôle, si vous êtes l’auteur d’un contrôle personnalisé ou si vous remplacez un modèle de contrôle pour des contrôles existants. Pour plus d’informations, voir Démarrage rapide : modèles de contrôles.

Il est relativement courant pour propertyName et targetProperty d’utiliser le même nom de propriété. Dans ce cas, un contrôle peut définir une propriété sur elle-même et la transmettre à une propriété existante nommée de manière intuitive de l’une de ses parties de composants. Par exemple, un contrôle qui incorpore un Contrôle TextBlock dans sa composition, qui est utilisé pour afficher sa propre propriété Text , peut inclure ce CODE XAML dans le modèle de contrôle : <TextBlock Text="{TemplateBinding Text}" .... />

Les types utilisés comme valeur de la propriété de source et valeur de la propriété cible doivent correspondre. Il est impossible d’introduire un convertisseur lorsque vous utilisez TemplateBinding. Si les valeurs ne correspondent pas, une erreur se produit lors de l’analyse du code XAML. Si vous avez besoin d’un convertisseur, vous pouvez utiliser la syntaxe détaillée pour une liaison de modèle telle que : {Binding RelativeSource={RelativeSource TemplatedParent}, Converter="..." ...}

Toute tentative d’utilisation d’un TemplateBinding en dehors d’une définition ControlTemplate en XAML engendre une erreur d’analyse.

Vous pouvez utiliser TemplateBinding lorsque la valeur du parent basé sur un modèle est également différée comme autre liaison. L’évaluation de TemplateBinding peut démarrer lorsque des valeurs sont affectées à des liaisons runtime requises.

TemplateBinding est toujours une liaison à sens unique. Les deux propriétés doivent toutes être des propriétés de dépendance.

TemplateBinding est une extension de balisage. Les extensions de balisage sont généralement implémentées pour éviter que les valeurs d’attribut ne soient autre chose que des valeurs littérales ou des noms de gestionnaire et lorsque l’exigence dépasse le cadre de la définition de convertisseurs de type sur certains types ou propriétés. Toutes les extensions de balisage XAML utilisent les caractères « { » et « } » dans leur syntaxe d’attribut, ce qui correspond à la convention qui permet au processeur XAML de reconnaître qu’une extension de balisage doit traiter l’attribut.

Remarque Dans l’implémentation du processeur XAML Windows Runtime, il n’existe aucune représentation de classe de stockage pour TemplateBinding. TemplateBinding est à utiliser exclusivement dans le balisage XAML. Il n’y a pas de moyen simple de reproduire le comportement dans du code.

x:Bind dans ControlTemplate

Notes

L’utilisation de x:Bind dans un ControlTemplate nécessite Windows 10, version 1809 (SDK 17763) ou version ultérieure. Pour plus d’informations sur les versions cibles, voir Code adaptatif de version.

À partir de Windows 10, version 1809, vous pouvez utiliser l’extension de balisage x:Bind partout où vous utilisez TemplateBinding dans un ControlTemplate.

La propriété TargetType est obligatoire (non facultative) sur ControlTemplate lors de l’utilisation de x:Bind.

Avec la prise en charge de x:Bind , vous pouvez utiliser des liaisons de fonction ainsi que des liaisons bidirectionnelle dans un ControlTemplate.

Dans cet exemple, la propriété TextBlock.Text prend la valeur Button.Content.ToString. Le TargetType sur le ControlTemplate agit en tant que source de données et effectue le même résultat qu’un TemplateBinding à parent.

<ControlTemplate TargetType="Button">
    <Grid>
        <TextBlock Text="{x:Bind Content, Mode=OneWay}"/>
    </Grid>
</ControlTemplate>