Partager via


Extension de balisage {RelativeSource}

Fournit un moyen de spécifier la source d’une liaison en termes de relation relative dans le graphique d’objet d’exécution.

Utilisation des attributs XAML (mode libre)

<Binding RelativeSource="{RelativeSource Self}" .../>
-or-
<object property="{Binding RelativeSource={RelativeSource Self} ...}" .../>

Utilisation des attributs XAML (mode TemplatedParent)

<Binding RelativeSource="{RelativeSource TemplatedParent}" .../>
-or-
<object property="{Binding RelativeSource={RelativeSource TemplatedParent} ...}" .../>

Valeurs XAML

Terme Description
{RelativeSource Self} Produit une valeur mode de Self. L’élément cible doit être utilisé comme source pour cette liaison. Cela est utile pour lier une propriété d’un élément à une autre propriété sur le même élément.
{RelativeSource TemplatedParent} Produit un ControlTemplate appliqué comme source pour cette liaison. Cela est utile pour appliquer des informations d’exécution aux liaisons au niveau du modèle.

Notes

Une liaison peut définir Binding.RelativeSource en tant qu’attribut sur un élément d’objet Binding ou en tant que composant dans une extension de balisage {Binding}. C’est pourquoi deux syntaxes XAML différentes sont affichées.

RelativeSource est similaire à l’extension de balisage {Binding}. Il s’agit d’une extension de balisage capable de retourner des instances de lui-même et de prendre en charge une construction basée sur des chaînes qui transmet essentiellement un argument au constructeur. Dans ce cas, l’argument passé est la valeur mode.

Le mode Self est utile pour lier une propriété d’un élément à une autre propriété sur le même élément, et est une variante de la liaison ElementName, mais ne nécessite pas d’affectation de noms, puis de référencer automatiquement l’élément. Si vous liez une propriété d’un élément à une autre propriété sur le même élément, soit les propriétés doivent utiliser le même type de propriété, soit vous devez également utiliser un convertisseur sur la liaison pour convertir les valeurs. Par exemple, vous pouvez utiliser Height comme source pour Width sans conversion, mais vous avez besoin d’un convertisseur pour utiliser IsEnabled comme source pour Visibility.

Voici un exemple. Ce rectangle utilise une extension de balisage {Binding} afin que sa hauteur et sa largeur soient toujours égales et qu’elle s’affiche en tant que carré. Seule la hauteur est définie comme une valeur fixe. Pour ce rectangle, son DataContext par défaut est null, et non pas pour cela. Par conséquent, pour établir la source de contexte de données comme objet lui-même (et activer la liaison à ses autres propriétés), nous utilisons l’argument RelativeSource={RelativeSource Self} dans l’utilisation de l’extension de balisage {Binding}.

<Rectangle
  Fill="Orange" Width="200"
  Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}"
/>

Une autre utilisation RelativeSource={RelativeSource Self} consiste à définir DataContext d’un objet sur elle-même. Par exemple, vous pouvez voir cette technique dans certains exemples du Kit de développement logiciel (SDK) où la classe Page a été étendue avec une propriété personnalisée qui fournit déjà un modèle de vue prêt à l’utilisation pour sa propre liaison de données, par exemple : <common:LayoutAwarePage ... DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}">

Notez que l’utilisation XAML pour RelativeSource affiche uniquement l’utilisation pour laquelle elle est destinée : définition d’une valeur pour Binding.RelativeSource en XAML dans le cadre d’une expression de liaison. Théoriquement, d’autres utilisations sont possibles si vous définissez une propriété où la valeur est RelativeSource.