RelativeSource, extension de balisage

Spécifie les propriétés d'une source de liaison RelativeSource, à utiliser dans un Binding, extension de balisage, ou lors de la définition de la propriété RelativeSource d'un élément Binding établie dans XAML.

Utilisation d'attributs XAML

<Binding RelativeSource="{RelativeSource modeEnumValue}" .../>

Utilisation des attributs XAML (imbriqués dans l'extension de liaison)

<object property="{Binding RelativeSource={RelativeSource modeEnumValue} ...}" .../>

Utilisation des éléments d'objet XAML

<Binding>
  <Binding.RelativeSource>
    <RelativeSource Mode="modeEnumValue"/>
  </Binding.RelativeSource>
</Binding>
- or 
<Binding>
  <Binding.RelativeSource>
    <RelativeSource
      Mode="FindAncestor"
      AncestorType="{x:Type typeName}"
      AncestorLevel="intLevel"
    />
  </Binding.RelativeSource>
</Binding>

Valeurs XAML

modeEnumValue

Une des valeurs suivantes :

  • Le jeton de chaîne Self correspond à un RelativeSource comme créé avec sa propriété Mode définie à Self.

  • Le jeton de chaîne TemplatedParent correspond à un RelativeSource comme créé avec sa propriété Mode définie à TemplatedParent.

  • Le jeton de chaîne PreviousData correspond à un RelativeSource comme créé avec sa propriété Mode définie à PreviousData.

  • Voir ci-dessous pour des informations sur le mode FindAncestor.

FindAncestor

Le jeton de chaîne FindAncestor. L'utilisation de ce jeton accède à un mode dans lequel un RelativeSource spécifie un type d'ancêtre et, en option, un niveau d'ancêtre. Ce correspond à un RelativeSource comme créé avec sa propriété Mode définie à FindAncestor.

typeName

Nécessaire pour le mode FindAncestor. Le nom d'un type, qui remplit la propriété AncestorType.

intLevel

Facultatif pour le mode FindAncestor. Un niveau d'ancêtre (évalué vers la direction du parent dans l'arborescence logique).

Notes

Les utilisations de liaison de {RelativeSource TemplatedParent} sont une technique principale qui gère un concept plus vaste de séparation de l'interface utilisateur d'un contrôle et d'une logique de contrôle. Cela permet la liaison à partir de la définition de modèle au parent basé sur des modèles (instance de l'objet à l'exécution où le modèle est appliqué). Dans ce cas, TemplateBinding, extension de balisage est en fait un raccourci pour l'expression de liaison suivante : {Binding RelativeSource={RelativeSource TemplatedParent}}. Les utilisations de TemplateBinding ou de {RelativeSource TemplatedParent} sont tous deux uniquement pertinents dans le code XAML qui définit un modèle. Pour plus d'informations, consultez TemplateBinding, extension de balisage.

{RelativeSource FindAncestor} est principalement utilisé dans les modèles de contrôle ou compositions autonomes prédictibles lors de l'interface utilisateur, dans les cas où un contrôle est toujours supposé être dans une arborescence d'éléments visuels d'un certain type ancêtre. Par exemple, les éléments d'un contrôle d'éléments peuvent utiliser des utilisations de FindAncestor pour les lier aux propriétés de leur ancêtre parent du contrôle d'éléments. Ou les éléments qui font partie de la composition de contrôle dans un modèle peuvent utiliser des liaisons de FindAncestor aux éléments parents dans cette même structure de composition.

Dans la syntaxe d'élément objet du mode FindAncestor indiqué dans les sections de syntaxe XAML, la deuxième syntaxe d'élément objet est utilisée spécifiquement pour le mode FindAncestor. Le mode FindAncestor requiert une valeur AncestorType. Vous devez affecter AncestorType comme un attribut à l'aide d'une référence x:Type, extension de balisage au type d'ancêtre à rechercher. La valeur AncestorType est utilisée lorsque la demande de liaison est traitée lors de l'exécution.

Pour le mode FindAncestor, la propriété AncestorLevel facultative peut contribuer à désambiguïser la recherche d'ancêtre dans les cas où il existe peut-être plusieurs ancêtres de ce type présents dans l'arborescence d'éléments.

Pour plus d'informations sur l'utilisation du mode FindAncestor, consultez RelativeSource.

{RelativeSource Self} est utile pour les scénarios où une propriété d'instance doit dépendre de la valeur d'une autre propriété de la même instance et aucune relation générale des propriétés de dépendance (telle que la contrainte) n'existe déjà entre ces deux propriétés. Bien qu'il soit rare que deux propriétés existent sur un objet de telle façon que les valeurs sont littéralement identiques (et sont identiquement typées), vous pouvez également appliquer un paramètre Converter à une liaison qui a {RelativeSource Self} et utiliser le convertisseur pour convertir entre la source et les types cibles. Un autre scénario pour {RelativeSource Self} est dans le cadre de MultiDataTrigger.

Par exemple, le code XAML suivant définit un élément Rectangle tels que tout ce que la valeur est entrée pour Width, Rectangle est toujours angle droit : <Rectangle Width="200" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}" .../>

{RelativeSource PreviousData} est utile dans les modèles de données ou dans les cas où les liaisons utilisent une collection comme source de données. Vous pouvez utiliser {RelativeSource PreviousData} pour mettre en surbrillance les relations entre les éléments de données adjacents de la collection. Une technique connexe est de générer MultiBinding entre des éléments actuels et précédents dans la source de données, et d'utiliser un convertisseur sur cette liaison pour déterminer la différence entre les deux éléments et leurs propriétés.

Dans l'exemple suivant, le premier TextBlock dans le modèle d'éléments affiche le numéro actuel. La deuxième liaison de TextBlock est MultiBinding qui a nominalement deux constituants de Binding : l'enregistrement courant, et une liaison qui utilise délibérément l'enregistrement de données précédent à l'aide de {RelativeSource PreviousData}. Ensuite, un convertisseur sur MultiBinding calcule la différence et la retourne à la liaison.

        <ListBox Name="fibolist">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding}"/>
                    <TextBlock>, difference = </TextBlock>
                        <TextBlock>
                            <TextBlock.Text>
                                <MultiBinding Converter="{StaticResource DiffConverter}">
                                    <Binding/>
                                    <Binding RelativeSource="{RelativeSource PreviousData}"/>
                                </MultiBinding>
                            </TextBlock.Text>
                        </TextBlock>
                    </StackPanel>
                    </DataTemplate>
            </ListBox.ItemTemplate>

La description de la liaison de données en tant que concept n'est pas couverte ici, consultez Vue d'ensemble de la liaison de données.

Dans l'implémentation de processeur XAML WPF, la gestion de cette extension de balisage est définie par la classe RelativeSource.

RelativeSource est une extension de balisage. Des 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 va plus loin que la définition de convertisseurs de type sur certains types ou propriétés. En XAML, toutes les extensions de balisage utilisent les caractères { et } dans leur syntaxe d'attributs, convention selon laquelle un processeur XAML reconnaît qu'une extension de balisage doit traiter l'attribut. Pour plus d'informations, consultez Extensions de balisage et XAML WPF.

Voir aussi

Référence

Binding

x:Type, extension de balisage

Concepts

Application d'un style et création de modèles

Vue d'ensemble du langage XAML (WPF)

Extensions de balisage et XAML WPF

Vue d'ensemble de la liaison de données

Vue d'ensemble des déclarations de liaison