RelativeSource, extension de balisageRelativeSource MarkupExtension

Spécifie les propriétés d’une RelativeSource source de liaison à utiliser dans une extension de balisage de liaison, ou lors de la définition de la RelativeSource propriété d’un Binding élément établi en XAML.Specifies properties of a RelativeSource binding source, to be used within a Binding Markup Extension, or when setting the RelativeSource property of a Binding element established in XAML.

Utilisation d'attributs XAMLXAML Attribute Usage

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

Utilisation des attributs XAML (imbriqués dans l'extension de liaison)XAML Attribute Usage (nested within Binding extension)

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

Utilisation d'éléments objet XAMLXAML Object Element Usage

<Binding>
  <Binding.RelativeSource>
    <RelativeSource Mode="modeEnumValue"/>
  </Binding.RelativeSource>
</Binding>

- ou --or-

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

Valeurs XAMLXAML Values

modeEnumValue Celui-ci peut avoir l'une des valeurs suivantes :One of the following:

-Le jeton de chaîne Self ; correspond à un RelativeSource comme créé avec sa Mode propriété définie sur Self .- The string token Self; corresponds to a RelativeSource as created with its Mode property set to Self.
-Le jeton de chaîne TemplatedParent ; correspond à un RelativeSource comme créé avec sa Mode propriété définie sur TemplatedParent .- The string token TemplatedParent; corresponds to a RelativeSource as created with its Mode property set to TemplatedParent.
-Le jeton de chaîne PreviousData ; correspond à un RelativeSource comme créé avec sa Mode propriété définie sur PreviousData .- The string token PreviousData; corresponds to a RelativeSource as created with its Mode property set to PreviousData.
-Voir ci-dessous pour plus d’informations sur le FindAncestor mode.- See below for information on FindAncestor mode.
FindAncestor Le jeton de chaîne FindAncestor.The string token 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.Using this token enters a mode whereby a RelativeSource specifies an ancestor type and optionally an ancestor level. Ce correspond à un RelativeSource comme créé avec sa propriété Mode définie à FindAncestor.This corresponds to a RelativeSource as created with its Mode property set to FindAncestor.
typeName Nécessaire pour le mode FindAncestor.Required for FindAncestor mode. Le nom d'un type, qui remplit la propriété AncestorType.The name of a type, which fills the AncestorType property.
intLevel Facultatif pour le mode FindAncestor.Optional for FindAncestor mode. Un niveau d'ancêtre (évalué vers la direction du parent dans l'arborescence logique).An ancestor level (evaluated towards the parent direction in the logical tree).

RemarquesRemarks

{RelativeSource TemplatedParent} les utilisations de liaison sont une technique clé qui résout un plus grand concept de séparation de l’interface utilisateur d’un contrôle et d’une logique de contrôle.{RelativeSource TemplatedParent} binding usages are a key technique that addresses a larger concept of the separation of a control's UI and a control's logic. 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é).This enables binding from within the template definition to the templated parent (the run time object instance where the template is applied). Dans ce cas, l' extension de balisage TemplateBinding est en fait un raccourci pour l’expression de liaison suivante : {Binding RelativeSource={RelativeSource TemplatedParent}} .For this case, the TemplateBinding Markup Extension is in fact a shorthand for the following binding expression: {Binding RelativeSource={RelativeSource TemplatedParent}}. TemplateBinding les {RelativeSource TemplatedParent} utilisations ou sont toutes deux uniquement pertinentes dans le code XAML qui définit un modèle.TemplateBinding or {RelativeSource TemplatedParent} usages are both only relevant within the XAML that defines a template. Pour plus d’informations, consultez l' extension de balisage TemplateBinding.For more information, see TemplateBinding Markup Extension.

{RelativeSource FindAncestor} est principalement utilisé dans les modèles de contrôle ou les compositions d’interface utilisateur autonomes prévisibles, pour les cas où un contrôle est toujours supposé être dans une arborescence d’éléments visuels d’un certain type d’ancêtre.{RelativeSource FindAncestor} is mainly used in control templates or predictable self-contained UI compositions, for cases where a control is always expected to be in a visual tree of a certain ancestor type. 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.For example, items of an items control might use FindAncestor usages to bind to properties of their items control parent ancestor. 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.Or, elements that are part of control composition in a template can use FindAncestor bindings to the parent elements in that same composition structure.

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.In the object element syntax for FindAncestor mode shown in the XAML Syntax sections, the second object element syntax is used specifically for FindAncestor mode. Le mode FindAncestor requiert une valeur AncestorType.FindAncestor mode requires an AncestorType value. Vous devez définir AncestorType en tant qu’attribut à l’aide d’une référence d' extension de balisage x :type au type d’ancêtre à rechercher.You must set AncestorType as an attribute using an x:Type Markup Extension reference to the type of ancestor to look for. La valeur AncestorType est utilisée lorsque la demande de liaison est traitée lors de l'exécution.The AncestorType value is used when the binding request is processed at run-time.

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.For FindAncestor mode, the optional property AncestorLevel can help disambiguate the ancestor lookup in cases where there is possibly more than one ancestor of that type existing in the element tree.

Pour plus d'informations sur l'utilisation du mode FindAncestor, consultez RelativeSource.For more information on how to use the FindAncestor mode, see RelativeSource.

{RelativeSource Self} est utile pour les scénarios où une propriété d’une instance doit dépendre de la valeur d’une autre propriété de la même instance, et qu’aucune relation de propriété de dépendance générale (telle que la contrainte) n’existe déjà entre ces deux propriétés.{RelativeSource Self} is useful for scenarios where one property of an instance should depend on the value of another property of the same instance, and no general dependency property relationship (such as coercion) already exists between those two properties. Bien qu’il soit rare que deux propriétés existent sur un objet de telle sorte que les valeurs soient littéralement identiques (et sont de type identique), vous pouvez également appliquer un Converter paramètre à une liaison qui a {RelativeSource Self} , et utiliser le convertisseur pour effectuer une conversion entre des types source et cible.Although it is rare that two properties exist on an object such that the values are literally identical (and are identically typed), you can also apply a Converter parameter to a binding that has {RelativeSource Self}, and use the converter to convert between source and target types. Un autre scénario pour {RelativeSource Self} est dans le cadre d’un MultiDataTrigger .Another scenario for {RelativeSource Self} is as part of a 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}" .../>For example, the following XAML defines a Rectangle element such that no matter what value is entered for Width, the Rectangle is always a square: <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ù des liaisons utilisent une collection comme source de données.{RelativeSource PreviousData} is useful either in data templates, or in cases where bindings are using a collection as the data source. Vous pouvez utiliser {RelativeSource PreviousData} pour mettre en surbrillance les relations entre des éléments de données adjacents dans la collection.You can use {RelativeSource PreviousData} to highlight relationships between adjacent data items in the 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.A related technique is to establish a MultiBinding between the current and previous items in the data source, and use a converter on that binding to determine the difference between the two items and their properties.

Dans l'exemple suivant, le premier TextBlock dans le modèle d'éléments affiche le numéro actuel.In the following example, the first TextBlock in the items template displays the current number. La deuxième TextBlock liaison est un MultiBinding qui a nominalement deux Binding constituants : l’enregistrement actif et une liaison qui utilise délibérément l’enregistrement de données précédent à l’aide de {RelativeSource PreviousData} .The second TextBlock binding is a MultiBinding that nominally has two Binding constituents: the current record, and a binding that deliberately uses the previous data record by using {RelativeSource PreviousData}. Ensuite, un convertisseur sur MultiBinding calcule la différence et la retourne à la liaison.Then, a converter on the MultiBinding calculates the difference and returns it to the binding.

<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>
</ListBox>

La description de la liaison de données comme concept n’est pas abordée ici, consultez vue d’ensemblede la liaison de données.Describing data binding as a concept is not covered here, see Data Binding Overview.

Dans l' WPFWPF implémentation du processeur XAML, la gestion de cette extension de balisage est définie par la RelativeSource classe.In the WPFWPF XAML processor implementation, the handling for this markup extension is defined by the RelativeSource class.

RelativeSource est une extension de balisage.RelativeSource is a markup extension. 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.Markup extensions are typically implemented when there is a requirement to escape attribute values to be other than literal values or handler names, and the requirement is more global than just putting type converters on certain types or properties. Toutes les extensions de balisage en XAML utilisent les { } caractères et dans leur syntaxe d’attribut, qui est la Convention selon laquelle un processeur XAML reconnaît qu’une extension de balisage doit traiter l’attribut.All markup extensions in XAML use the { and } characters in their attribute syntax, which is the convention by which a XAML processor recognizes that a markup extension must process the attribute. Pour plus d’informations, consultez Extensions de balisage et XAML WPF.For more information, see Markup Extensions and WPF XAML.

Voir aussiSee also