Vue d’ensemble des propriétés de dépendanceDependency properties overview

Cette rubrique décrit le système de propriétés de dépendance disponible quand vous écrivez une application Windows Runtime en C++, C# ou Visual Basic avec des définitions XAML pour l’interface utilisateur.This topic explains the dependency property system that is available when you write a Windows Runtime app using C++, C#, or Visual Basic along with XAML definitions for UI.

Qu’est-ce qu’une propriété de dépendance ?What is a dependency property?

Une propriété de dépendance est un type spécialisé de propriétéA dependency property is a specialized type of property. Plus précisément, il s’agit d’une propriété dont la valeur est suivie et influencée par un système de propriétés dédié qui fait partie de Windows Runtime.Specifically it's a property where the property's value is tracked and influenced by a dedicated property system that is part of the Windows Runtime.

Afin de prendre en charge une propriété de dépendance, l’objet qui définit la propriété doit être un objet DependencyObject (en d’autres termes, une classe ayant une classe de base DependencyObject quelque part dans son héritage).In order to support a dependency property, the object that defines the property must be a DependencyObject (in other words a class that has the DependencyObject base class somewhere in its inheritance). La plupart des types que vous utilisez pour vos définitions d’interface utilisateur pour une application UWP avec XAML sont une sous-classe DependencyObject et prend en charge les propriétés de dépendance.Many of the types you use for your UI definitions for a UWP app with XAML will be a DependencyObject subclass, and will support dependency properties. Toutefois, un type provenant d’un espace de noms Windows Runtime dont le nom ne comporte pas « XAML » ne prendra pas en charge les propriétés de dépendance. Ce sont des propriétés de type ordinaire qui ne présentent pas le comportement de dépendance du système de propriétés.However, any type that comes from a Windows Runtime namespace that doesn't have "XAML" in its name won't support dependency properties; properties of such types are ordinary properties that won't have the property system's dependency behavior.

Le but des propriétés de dépendance est de fournir un moyen systémique pour calculer la valeur d’une propriété en fonction d’autres entrées (d’autres propriétés, événements et états qui interviennent dans une application en cours d’exécution).The purpose of dependency properties is to provide a systemic way to compute the value of a property based on other inputs (other properties, events and states that occur within your app while it runs). Il peut s’agir des entrées suivantes :These other inputs might include:

  • entrée externe telle qu’une préférence utilisateur ;External input such as user preference
  • mécanismes de détermination de propriété juste-à-temps tels que la liaison de données, les animations et les tables de montage séquentiel ;Just-in-time property determination mechanisms such as data binding, animations and storyboards
  • modèles à utilisation multiples tels que ressources et styles ;Multiple-use templating patterns such as resources and styles
  • valeurs connues par le biais de relations parent-enfant avec d’autres éléments dans l’arborescence d’objets.Values known through parent-child relationships with other elements in the object tree

Une propriété de dépendance représente ou prend en charge une fonctionnalité spécifique du modèle de programmation pour définir une application Windows Runtime avec XAML pour l’interface utilisateur et les extensions de composant C#, Microsoft Visual Basic ou Visual C++ (C++/CX) pour le code.A dependency property represents or supports a specific feature of the programming model for defining a Windows Runtime app with XAML for UI and C#, Microsoft Visual Basic or Visual C++ component extensions (C++/CX) for code. Ces fonctionnalités sont les suivantes :These features include:

  • Liaison de donnéesData binding
  • StylesStyles
  • Animations dans une table de montage séquentielStoryboarded animations
  • Comportement de « PropertyChanged » (il est possible d’implémenter une propriété de dépendance afin de fournir des rappels capables de propager des modifications à d’autres propriétés de dépendance)"PropertyChanged" behavior; a dependency property can be implemented to provide callbacks that can propagate changes to other dependency properties
  • Utilisation d’une valeur par défaut provenant de métadonnées de propriétéUsing a default value that comes from property metadata
  • L’utilitaire de système de propriétés général, tel que ClearValue et la recherche de métadonnéesGeneral property system utility such as ClearValue and metadata lookup

Propriétés de dépendance et propriétés Windows RuntimeDependency properties and Windows Runtime properties

Les propriétés de dépendance étendent les fonctionnalités des propriétés Windows Runtime de base en fournissant une banque de propriétés interne globale contenant toutes les propriétés de dépendance d’une application au moment de l’exécution.Dependency properties extend basic Windows Runtime property functionality by providing a global, internal property store that backs all of the dependency properties in an app at run time. Il s’agit d’une solution différente du modèle standard de stockage d’une propriété avec un champ privé, qui est privé dans la classe de définition de la propriété.This is an alternative to the standard pattern of backing a property with a private field that's private in the property-definition class. Vous pouvez considérer cette banque de propriétés interne comme un ensemble d’identificateurs et de valeurs de propriété qui existent pour un objet particulier (tant qu’il s’agit d’un DependencyObject).You can think of this internal property store as being a set of property identifiers and values that exist for any particular object (so long as it's a DependencyObject). Au lieu d’être identifié par le nom, chaque propriété du magasin est identifiée par une instance de DependencyProperty .Rather than being identified by name, each property in the store is identified by a DependencyProperty instance. Cependant, le système de propriétés masque en grande partie ce détail d’implémentation : vous pouvez généralement accéder aux propriétés de dépendance en utilisant un nom simple (nom de propriété par programmation dans le langage du code que vous utilisez, ou un nom d’attribut quand vous écrivez du code XAML).However, the property system mostly hides this implementation detail: you can usually access dependency properties by using a simple name (the programmatic property name in the code language you're using, or an attribute name when you're writing XAML).

Le type de base qui fournit les fondations du système de propriétés de dépendance est DependencyObject.The base type that provides the underpinnings of the dependency property system is DependencyObject. DependencyObject définit des méthodes qui peuvent accéder à la propriété de dépendance, et les instances d’une classe dérivée de DependencyObject prennent en charge en interne le concept de banque de propriétés mentionné plus haut.DependencyObject defines methods that can access the dependency property, and instances of a DependencyObject derived class internally support the property store concept we mentioned earlier.

Voici un résumé de la terminologie que nous employons dans la présente documentation concernant les propriétés de dépendance :Here is a summation of the terminology that we use in the documentation when discussing dependency properties:

TermeTerm DescriptionDescription
Propriété de dépendanceDependency property Propriété qui existe sur un identificateur DependencyProperty (voir ci-dessous).A property that exists on a DependencyProperty identifier (see below). Cet identificateur est généralement disponible en tant que membre statique de la classe dérivée DependencyObject de définition.Usually this identifier is available as a static member of the defining DependencyObject derived class.
Identificateur de propriété de dépendanceDependency property identifier Valeur de constante permettant d’identifier la propriété. Elle est généralement publique et en lecture seule.A constant value to identify the property, it is typically public and read-only.
Wrapper de propriétéProperty wrapper Implémentations get et set pouvant être appelées pour une propriété Windows Runtime.The callable get and set implementations for a Windows Runtime property. Sinon, projection propre au langage de la définition d’origine.Or, the language-specific projection of the original definition. Une implémentation wrapper de propriété get appelle GetValue, en passant l’identificateur de propriété de dépendance approprié.A get property wrapper implementation calls GetValue, passing the relevant dependency property identifier.

Le wrapper de propriété n’est pas seulement pratique pour les appelants, il expose également la propriété de dépendance à tout processus, tout outil ou toute projection qui utilise des définitions Windows Runtime pour les propriétés.The property wrapper is not just convenience for callers, it also exposes the dependency property to any process, tool or projection that uses Windows Runtime definitions for properties.

L’exemple suivant définit une propriété de dépendance personnalisée telle que définie pour C# et montre la relation de l’identificateur de propriété de dépendance avec le wrapper de propriété.The following example defines a custom dependency property as defined for C#, and shows the relationship of the dependency property identifier to the property wrapper.

public static readonly DependencyProperty LabelProperty = DependencyProperty.Register(
  "Label",
  typeof(string),
  typeof(ImageWithLabelControl),
  new PropertyMetadata(null)
);


public string Label
{
    get { return (string)GetValue(LabelProperty); }
    set { SetValue(LabelProperty, value); }
}

Notes

L’exemple précédent n’est pas conçu comme un exemple complet pour la création d’une propriété de dépendance personnalisée.The preceding example is not intended as the complete example for how to create a custom dependency property. Il vise à illustrer les concepts de propriété de dépendance pour toute personne qui assimile mieux des concepts d’apprentissage par le biais du code.It is intended to show dependency property concepts for anyone that prefers learning concepts through code. Pour une explication plus complète de cet exemple, consultez Propriétés de dépendance personnalisées.For a more complete explanation of this example, see Custom dependency properties.

Priorité de la valeur d’une propriété de dépendanceDependency property value precedence

Lorsque vous obtenez la valeur d’une propriété de dépendance, vous obtenez une valeur qui a été déterminée pour cette propriété via l’une des entrées qui participent au système de propriétés Windows Runtime.When you get the value of a dependency property, you are obtaining a value that was determined for that property through any one of the inputs that participate in the Windows Runtime property system. Il existe une priorité de la valeur de la propriété de dépendance selon laquelle le système de propriétés Windows Runtime peut calculer des valeurs de manière prévisible. Il est donc important que vous soyez également familiarisé avec l’ordre de priorité de base.Dependency property value precedence exists so that the Windows Runtime property system can calculate values in a predictable way, and it's important that you be familiar with the basic precedence order too. Sinon, il peut vous arriver d’essayer de définir une propriété à un niveau de priorité tandis qu’un autre paramètre (le système, un appelant tiers, une partie de votre propre code) est en train de la définir à un autre niveau. Vous ne saurez expliquer quelle valeur de propriété est utilisée et d’où cette valeur provient.Otherwise, you might find yourself in a situation where you're trying to set a property at one level of precedence but something else (the system, third-party callers, some of your own code) is setting it at another level, and you'll get frustrated trying to figure out which property value is used and where that value came from.

Par exemple, les styles et modèles ont vocation à constituer un point de départ partagé pour établir des valeurs de propriété, et par conséquent les aspects d’un contrôle.For example, styles and templates are intended to be a shared starting point for establishing property values and thus appearances of a control. Mais sur une instance de contrôle particulière, vous pouvez avoir envie de modifier sa valeur par rapport à la valeur du modèle courant, notamment en donnant à ce contrôle une couleur d’arrière-plan différent ou une chaîne de texte différente en tant que contenu.But on a particular control instance you might want to change its value versus the common templated value, such as giving that control a different background color or a different text string as content. Le système de propriétés Windows Runtime considère les valeurs locales à un niveau de priorité supérieur à celui des valeurs fournies par les styles et modèles.The Windows Runtime property system considers local values at higher precedence than values provided by styles and templates. Cela permet d’avoir un scénario dans lequel des valeurs spécifiques à l’application remplacent les modèles. Vous pouvez donc utiliser comme il vous semble les contrôles dans l’interface utilisateur de l’application.That enables the scenario of having app-specific values overwrite the templates so that the controls are useful for your own use of them in app UI.

Ordre de priorité des propriétés de dépendanceDependency property precedence list

La liste suivante indique l’ordre définitif utilisé par le système de propriétés pour assigner les valeurs d’exécution d’une propriété de dépendance.The following is the definitive order that the property system uses when assigning the run-time value for a dependency property. La priorité la plus élevée est répertoriée en premier.Highest precedence is listed first. Vous trouverez des explications détaillées au bas de cette liste.You'll find more detailed explanations just past this list.

  1. Valeurs animées : animations actives, animations de l’état visuel ou animations avec un comportement HoldEnd.Animated values: Active animations, visual state animations, or animations with a HoldEnd behavior. Pour avoir un effet pratique, l’animation d’une propriété doit être prioritaire par rapport à la valeur de base (inanimée), même si cette valeur a été définie localement.To have any practical effect, an animation applied to a property must have precedence over the base (unanimated) value, even if that value was set locally.
  2. Valeur locale : elle peut être affectée à partir du wrapper de propriété, ce qui est comparable à la définition d’un attribut ou d’un élément de propriété en XAML ou par un appel de la méthode SetValue à l’aide d’une propriété d’une instance spécifique.Local value: A local value might be set through the convenience of the property wrapper, which also equates to setting as an attribute or property element in XAML, or by a call to the SetValue method using a property of a specific instance. Si vous définissez une valeur locale à l’aide d’une liaison ou d’une ressource statique, celle-ci fonctionne dans la priorité comme si une valeur locale avait été définie, et les liaisons ou références de ressources sont effacées si une nouvelle valeur locale est définie.If you set a local value by using a binding or a static resource, these each act in the precedence as if a local value was set, and bindings or resource references are erased if a new local value is set.
  3. Propriétés basées sur un modèle : un élément en comporte s’il a été créé dans le cadre d’un modèle (à partir d’une classe ControlTemplate ou DataTemplate).Templated properties: An element has these if it was created as part of a template (from a ControlTemplate or DataTemplate).
  4. Méthodes setter de style : valeurs provenant d’une classe Setter au sein de styles à partir de ressources d’application ou de page.Style setters: Values from a Setter within styles from page or application resources.
  5. Valeur par défaut : une propriété de dépendance peut avoir une valeur par défaut définie dans le cadre de ses métadonnées.Default value: A dependency property can have a default value as part of its metadata.

Propriétés basées sur un modèleTemplated properties

Les propriétés basées sur un modèle en tant qu’élément de priorité ne s’appliquent pas à toute propriété d’un élément que vous déclarez directement dans le balisage de page XAML.Templated properties as a precedence item do not apply to any property of an element that you declare directly in XAML page markup. Le concept de propriété basée sur un modèle existe uniquement pour les objets qui sont créés quand Windows Runtime applique un modèle XAML à un élément d’interface utilisateur et définit donc ses visuels.The templated property concept exists only for objects that are created when the Windows Runtime applies a XAML template to a UI element and thus defines its visuals.

Toutes les propriétés qui sont définies à partir d’un modèle de contrôle ont des valeurs d’un certain type.All the properties that are set from a control template have values of some kind. Ces valeurs s’apparentent à un jeu étendu de valeurs par défaut pour le contrôle et sont souvent associées à des valeurs que vous pouvez réinitialiser plus tard en définissant directement les valeurs des propriétés.These values are almost like an extended set of default values for the control and are often associated with values you can reset later by setting the property values directly. Ainsi, les valeurs définies par le modèle doivent pouvoir être distinguées d’une vraie valeur locale, de manière à ce que toute nouvelle valeur locale puisse la remplacer.Thus the template-set values must be distinguishable from a true local value, so that any new local value can overwrite it.

Notes

Dans certains cas, le modèle peut même remplacer des valeurs locales s’il ne parvient pas à exposer les références de l’extension de balisage {TemplateBinding} pour les propriétés définissables sur les instances.In some cases the template might override even local values, if the template failed to expose {TemplateBinding} markup extension references for properties that should have been settable on instances. Généralement, cela se produit uniquement si la propriété n’a réellement pas vocation à être définie sur les instances, par exemple si cela est seulement pertinent dans le cas des visuels et du comportement du modèle plutôt que de la fonction visée ou logique du runtime du contrôle qui utilise le modèle.This is usually done only if the property is really not intended to be set on instances, for example if it's only relevant to visuals and template behavior and not to the intended function or runtime logic of the control that uses the template.

Liaisons et prioritéBindings and precedence

Les opérations de liaison disposent de la priorité appropriée quelle que soit l’étendue pour laquelle elles sont utilisées.Binding operations have the appropriate precedence for whatever scope they're used for. Par exemple, une extension de balisage {Binding} appliquée à une valeur locale agit comme une valeur locale, et une extension de balisage {TemplateBinding} pour une méthode setter de propriété s’applique comme une méthode setter de style.For example, a {Binding} applied to a local value acts as local value, and a {TemplateBinding} markup extension for a property setter applies as a style setter does. Étant donné que les liaisons doivent patienter jusqu’au moment de l’exécution avant d’obtenir des valeurs à partir des sources de données, le processus de détermination de la priorité de la valeur d’une propriété, quelle qu’elle soit, s’étend également jusqu’au moment de l’exécution.Because bindings must wait until run-time to obtain values from data sources, the process of determining the property value precedence for any property extends into run-time as well.

Non seulement les liaisons fonctionnent au même niveau de priorité qu’une valeur locale, mais elles correspondent vraiment à une valeur locale, où la liaison est l’espace réservé pour une valeur différée.Not only do bindings operate at the same precedence as a local value, they really are a local value, where the binding is the placeholder for a value that is deferred. Si vous avez une liaison en place pour une valeur de propriété, et si vous définissez une valeur locale sur celle-ci au moment de l’exécution, elle remplace entièrement la liaison.If you have a binding in place for a property value, and you set a local value on it at run-time, that replaces the binding entirely. De même, si vous appelez la méthode SetBinding pour définir une liaison qui naît seulement au moment de l’exécution, vous remplacez n’importe quelle valeur locale que vous auriez plutôt appliquée en XAML ou par du code précédemment exécuté.Similarly, if you call SetBinding to define a binding that only comes into existence at run-time, you replace any local value you might have applied in XAML or with previously executed code.

Animations dans une table de montage séquentiel et valeur de baseStoryboarded animations and base value

Les animations de table de montage séquentiel agissent sur un concept de valeur de base.Storyboarded animations act on a concept of a base value. La valeur de base est déterminée par le système de propriétés en fonction de sa priorité, mais en omettant cette dernière étape de recherche d’animations.The base value is the value that's determined by the property system using its precedence, but omitting that last step of looking for animations. Par exemple, une valeur de base peut provenir d’un modèle de contrôle, ou de la définition d’une valeur locale sur une instance d’un contrôle.For example, a base value might come from a control's template, or it might come from setting a local value on an instance of a control. Dans les deux cas, l’application d’une animation remplacera cette valeur de base et appliquera la valeur animée aussi longtemps que votre animation poursuit son exécution.Either way, applying an animation will overwrite this base value and apply the animated value for as long as your animation continues to run.

Pour une propriété animée, la valeur de base peut encore avoir un impact sur le comportement de l’animation, si cette animation ne spécifie pas à la fois From et To de manière explicite, ou si l’animation rétablit la valeur de base une fois qu’elle est terminée.For an animated property, the base value can still have an effect on the animation's behavior, if that animation does not explicitly specify both From and To, or if the animation reverts the property to its base value when completed. Dans ces cas, à la fin de l’exécution d’une animation, le reste de la priorité est à nouveau utilisée.In these cases, once an animation is no longer running, the rest of the precedence is used again.

Toutefois, une animation qui spécifie un To avec un comportement HoldEnd peut remplacer une valeur locale jusqu’à ce qu’elle soit supprimée, même lorsqu’elle apparaît visuellement arrêtée.However, an animation that specifies a To with a HoldEnd behavior can override a local value until the animation is removed, even when it visually appears to be stopped. Conceptuellement, c’est comme si cette animation était exécutée indéfiniment même si aucune animation visuelle n’est produite dans l’interface utilisateur.Conceptually this is like an animation that's running forever even if there is not a visual animation in the UI.

Vous pouvez appliquer plusieurs animations à une seule propriété.Multiple animations can be applied to a single property. Chacune de ces animations a peut-être été définie pour remplacer les valeurs de base provenant de différents points dans la priorité de la valeur.Each of these animations might have been defined to replace base values that came from different points in the value precedence. Cependant, toutes ces animations vont être exécutées simultanément au moment de l’exécution. Cela signifie souvent qu’elles doivent combiner leurs valeurs car chaque animation a la même influence sur la valeur.However, these animations will all be running simultaneously at run time, and that often means that they must combine their values because each animation has equal influence on the value. Cela dépend de la manière exacte dont les animations sont définies et du type de la valeur qui est animée.This depends on exactly how the animations are defined, and the type of the value that is being animated.

Pour plus d’informations, voir Animations dans une table de montage séquentiel.For more info, see Storyboarded animations.

Valeurs par défautDefault values

L’établissement de la valeur par défaut pour une propriété de dépendance dont la valeur est PropertyMetadata est expliqué plus en détail dans la rubrique Propriétés de dépendance personnalisées.Establishing the default value for a dependency property with a PropertyMetadata value is explained in more detail in the Custom dependency properties topic.

Les propriétés de dépendance ont encore des valeurs par défaut même si celles-ci n’ont pas été explicitement définies dans les métadonnées d’une propriété donnée.Dependency properties still have default values even if those default values weren't explicitly defined in that property's metadata. Tant qu’elles ne sont pas modifiées par les métadonnées, les valeurs par défaut des propriétés de dépendance Windows Runtime comportent généralement l’un des éléments suivants :Unless they have been changed by metadata, default values for the Windows Runtime dependency properties are generally one of the following:

  • Une propriété qui utilise un objet au moment de l’exécution ou le type Object (un type de référence) a une valeur par défaut égale à null.A property that uses a run-time object or the basic Object type (a reference type) has a default value of null. Par exemple, la propriété DataContext a la valeur null jusqu’à ce qu’elle soit volontairement définie ou héritée.For example, DataContext is null until it's deliberately set or is inherited.
  • Une propriété qui utilise une valeur de base telle que des chiffres ou une valeur booléenne (un type de valeur) utilise une valeur par défaut attendue.A property that uses a basic value such as numbers or a Boolean value (a value type) uses an expected default for that value. À titre d’exemple, 0 pour les nombres entiers et à virgule flottante, false pour une valeur booléenne.For example, 0 for integers and floating-point numbers, false for a Boolean.
  • Une propriété qui utilise une structure Windows Runtime est dotée d’une valeur par défaut qui est obtenue par l’appel du constructeur implicite par défaut de cette structure.A property that uses a Windows Runtime structure has a default value that's obtained by calling that structure's implicit default constructor. Ce constructeur utilise les valeurs par défaut pour chaque champ de valeur de base de la structure.This constructor uses the defaults for each of the basic value fields of the structure. Par exemple, la valeur Point est initialisée par défaut avec ses valeurs X et Y à 0.For example, a default for a Point value is initialized with its X and Y values as 0.
  • Une propriété qui utilise une énumération a une valeur par défaut du premier membre défini dans cette énumération.A property that uses an enumeration has a default value of the first defined member in that enumeration. Vérifiez la référence des énumérations spécifiques pour connaître la valeur par défaut utilisée.Check the reference for specific enumerations to see what the default value is.
  • Une propriété qui utilise une chaîne (System.String pour .NET, Platform::String pour C++/CX) a la valeur par défaut d’une chaîne vide ("").A property that uses a string (System.String for .NET, Platform::String for C++/CX) has a default value of an empty string ("").
  • En général, les propriétés de collection ne sont pas implémentées en tant que propriétés de dépendance pour les raisons exposées plus loin dans cette rubrique.Collection properties aren't typically implemented as dependency properties, for reasons discussed further on in this topic. Mais si vous implémentez une propriété de collection personnalisée et que vous souhaitez la définir en tant que propriété de dépendance, assurez-vous d’éviter un singleton accidentel, comme décrit à la fin de la rubrique Propriétés de dépendance personnalisées.But if you implement a custom collection property and you want it to be a dependency property, make sure to avoid an unintentional singleton as described near the end of Custom dependency properties.

Fonctionnalité de propriété fournie par une propriété de dépendanceProperty functionality provided by a dependency property

Liaison de donnéesData binding

Vous pouvez définir la valeur d’une propriété de dépendance en appliquant une liaison de données.A dependency property can have its value set through applying a data binding. La liaison de données utilise la syntaxe de l’extension de balisage {Binding} en XAML, l’extension de balisage {x:Bind} ou la classe Binding dans le code.Data binding uses the {Binding} markup extension syntax in XAML, {x:Bind} markup extension or the Binding class in code. Pour une propriété liée directement aux données, la détermination de la valeur de la propriété finale est différée jusqu’au moment de l’exécution.For a databound property, the final property value determination is deferred until run time. La valeur est alors obtenue à partir d’une source de données.At that time the value is obtained from a data source. Le rôle joué ici par le système de propriétés de dépendance est l’activation d’un comportement d’espace réservé pour des opérations telles que le chargement de code XAML quand la valeur est encore inconnue, puis la fourniture de la valeur au moment de l’exécution par l’interaction avec le moteur de liaison de données Windows Runtime.The role that the dependency property system plays here is enabling a placeholder behavior for operations like loading XAML when the value is not yet known, and then supplying the value at run time by interacting with the Windows Runtime data binding engine.

L’exemple suivant définit la valeur Text d’un élément TextBlock, à l’aide d’une liaison en XAML.The following example sets the Text value for a TextBlock element, using a binding in XAML. La liaison utilise un contexte de données hérité et une source de données d’objet.The binding uses an inherited data context and an object data source. (Aucun des deux n’est présenté dans l’exemple réduit ; pour obtenir un exemple plus complet qui montre le contexte et la source, voir Présentation détaillée de la liaison de données.)(Neither of these is shown in the shortened example; for a more complete sample that shows context and source, see Data binding in depth.)

<Canvas>
  <TextBlock Text="{Binding Team.TeamName}"/>
</Canvas>

Vous pouvez également établir des liaisons à l’aide de code plutôt qu’en XAML.You can also establish bindings using code rather than XAML. Voir SetBinding.See SetBinding.

Notes

Les liaisons de ce type sont traitées comme une valeur locale à des fins de priorité de valeur de propriété de dépendance.Bindings like this are treated as a local value for purposes of dependency property value precedence. Si vous définissez une autre valeur locale pour une propriété qui détenait à l’origine une valeur de liaison , vous remplacerez entièrement la liaison, pas seulement la valeur d’exécution de la liaison.If you set another local value for a property that originally held a Binding value, you will overwrite the binding entirely, not just the binding's run-time value. Les liaisons {x : Bind} sont implémentées à l’aide du code généré qui définit une valeur locale pour la propriété.{x:Bind} Bindings are implemented using generated code that will set a local value for the property. Si vous définissez une valeur locale pour une propriété qui utilise {x : Bind}, cette valeur est alors remplacée à la prochaine évaluation de la liaison, par exemple lorsqu’elle observe une modification de la propriété sur son objet source.If you set a local value for a property that is using {x:Bind}, then that value will be replaced the next time the binding is evaluated, such as when it observes a property change on its source object.

Sources de liaison, cibles de liaison, le rôle de FrameworkElementBinding sources, binding targets, the role of FrameworkElement

Pour constituer la source d’une liaison, une propriété n’a pas besoin d’être une propriété de dépendance. Vous pouvez généralement utiliser n’importe quelle propriété en tant que source de liaison, bien que cela dépende de votre langage de programmation et que chacune comporte certains cas extrêmes.To be the source of a binding, a property does not need to be a dependency property; you can generally use any property as a binding source, although this depends on your programming language and each has certain edge cases. Toutefois, pour être la cible d’une extension de balisage {Binding} ou Binding, cette propriété doit être une propriété de dépendance.However, to be the target of a {Binding} markup extension or Binding, that property must be a dependency property. Ce n’est pas le cas pour l’extension de balisage {x : Bind} car elle utilise le code généré pour appliquer ses valeurs de liaison.{x:Bind} does not have this requirement as it uses generated code to apply its binding values.

Si vous créez une liaison dans le code, Notez que l’API SetBinding est définie uniquement pour FrameworkElement.If you are creating a binding in code, note that the SetBinding API is defined only for FrameworkElement. Toutefois, vous pouvez créer une définition de liaison à l’aide de BindingOperations à la place, et donc référencer une propriété DependencyObject .However, you can create a binding definition using BindingOperations instead, and thus reference any DependencyObject property.

Pour le code ou le XAML, n’oubliez pas que DataContext est une propriété FrameworkElement .For either code or XAML, remember that DataContext is a FrameworkElement property. En utilisant une forme d’héritage de propriétés entre parents et enfants (habituellement établi dans le balisage XAML), le système de liaison peut résoudre une propriété DataContext qui existe sur un élément parent.By using a form of parent-child property inheritance (typically established in XAML markup), the binding system can resolve a DataContext that exists on a parent element. Cet héritage peut effectuer l’évaluation même si l’objet enfant (qui possède la propriété cible) n’est pas une classe FrameworkElement et ne contient donc pas sa propre valeur DataContext.This inheritance can evaluate even if the child object (which has the target property) is not a FrameworkElement and therefore does not hold its own DataContext value. En revanche, cet élément parent (étant hérité) doit être une classe FrameworkElement afin de définir et contenir la propriété DataContext.However, the parent element being inherited must be a FrameworkElement in order to set and hold the DataContext. Autrement, vous devez définir la liaison de sorte qu’elle puisse fonctionner avec une valeur null pour la propriété DataContext.Alternatively, you must define the binding such that it can function with a null value for DataContext.

Connecter la liaison n’est pas la seule chose nécessaire dans la plupart des scénarios de liaison de données.Wiring the binding is not the only thing that's needed for most data binding scenarios. Pour qu’une liaison unidirectionnelle ou bidirectionnelle soit efficace, la propriété source doit prendre en charge les notifications de modifications qui se propagent au système de liaison et par conséquent à la cible.For a one-way or two-way binding to be effective, the source property must support change notifications that propagate to the binding system and thus the target. Pour les sources de liaison personnalisées, cela signifie que la propriété doit être une propriété de dépendance ou que l’objet doit prendre en charge INotifyPropertyChanged.For custom binding sources, this means that the property must be a dependency property, or the object must support INotifyPropertyChanged. Les collections doivent prendre en charge INotifyCollectionChanged.Collections should support INotifyCollectionChanged. Certaines classes prennent en charge ces interfaces dans leurs implémentations afin d’être utiles en tant que classes de base pour les scénarios de liaison de données. La classe ObservableCollection<T> en est un exemple.Certain classes support these interfaces in their implementations so that they are useful as base classes for data binding scenarios; an example of such a class is ObservableCollection<T>. Pour plus d’informations sur la liaison de données et sa relation avec le système de propriétés, voir Présentation détaillée de la liaison de données.For more information on data binding and how data binding relates to the property system, see Data binding in depth.

Notes

Les types répertoriés ici prennent en charge Microsoft .NET sources de données.The types listed here support Microsoft .NET data sources. Les sources de données C++/CX utilisent différentes interfaces pour la notification des modifications ou le comportement susceptible d’être observé. Voir Présentation détaillée de la liaison de données.C++/CX data sources use different interfaces for change notification or observable behavior, see Data binding in depth.

Styles et modèlesStyles and templates

Les styles et modèles constituent deux des scénarios pour la définition de propriétés en tant que propriétés de dépendance.Styles and templates are two of the scenarios for properties being defined as dependency properties. Les styles s’avèrent utiles pour définir les propriétés qui déterminent l’interface utilisateur de l’application.Styles are useful for setting properties that define the app's UI. Les styles sont définis en tant que ressources en XAML, qu’il s’agisse d’une entrée dans une collection de ressources ou dans des fichiers XAML distincts, tels que des dictionnaires de ressources de thème.Styles are defined as resources in XAML, either as an entry in a Resources collection, or in separate XAML files such as theme resource dictionaries. Les styles interagissent avec le système de propriétés car ils contiennent des méthodes setter pour les propriétés.Styles interact with the property system because they contain setters for properties. La propriété la plus importante ici est la propriété Control.Template d’une classe Control : elle définit la majeure partie de l’aspect visuel et de l’état visuel d’une classe Control.The most important property here is the Control.Template property of a Control: it defines most of the visual appearance and visual state for a Control. Pour plus d’informations sur les styles et pour obtenir un exemple XAML qui définit une classe Style et utilise des méthodes setter, voir Application de styles aux contrôles.For more info on styles, and some example XAML that defines a Style and uses setters, see Styling controls.

Les valeurs qui proviennent des styles ou des modèles sont des valeurs différées, semblables aux liaisons.Values that come from styles or templates are deferred values, similar to bindings. Il en est ainsi pour que les utilisateurs de contrôles puissent remodéliser les contrôles ou redéfinir les styles.This is so that control users can re-template controls or redefine styles. Et c’est pourquoi les méthodes setter de propriété dans les styles peuvent uniquement agir sur les propriétés de dépendance, pas sur les propriétés ordinaires.And that's why property setters in styles can only act on dependency properties, not ordinary properties.

Animations dans une table de montage séquentielStoryboarded animations

Vous pouvez animer la valeur d’une propriété de dépendance à l’aide d’une animation dans une table de montage séquentiel.You can animate a dependency property's value using a storyboarded animation. Dans Windows Runtime, les animations dans une table de montage séquentiel ne sont pas simplement des décorations visuelles.Storyboarded animations in the Windows Runtime are not merely visual decorations. Il est plus utile de penser aux animations en termes de technique de machine à états qui peut définir les valeurs des propriétés individuelles ou de toutes les propriétés et de tous les visuels d’un contrôle, et modifier ces valeurs dans le temps.It's more useful to think of animations as being a state machine technique that can set the values of individual properties or of all properties and visuals of a control, and change these values over time.

Pour être animée, la propriété cible de l’animation doit être une propriété de dépendance.To be animated, the animation's target property must be a dependency property. En outre, pour être animé, le type de valeur de la propriété cible doit être pris en charge par l’un des types d’animation dérivés de la chronologieexistants.Also, to be animated, the target property's value type must be supported by one of the existing Timeline-derived animation types. Les valeurs de couleur, de double et de point peuvent être animées à l’aide de techniques d’interpolation ou d’image clé.Values of Color, Double and Point can be animated using either interpolation or keyframe techniques. Vous pouvez animer la plupart des autres valeurs à l’aide d’images clés Object discrètes.Most other values can be animated using discrete Object key frames.

Lorsqu’une animation est appliquée et exécutée, la valeur animée fonctionne à un niveau de priorité supérieur à toute valeur (telle qu’une valeur locale) autrement affectée à la propriété.When an animation is applied and running, the animated value operates at a higher precedence than any value (such as a local value) that the property otherwise has. Les animations ont également un comportement HoldEnd facultatif qui peut provoquer l’application d’animations à des valeurs de propriété même si l’animation semble être arrêtée visuellement.Animations also have an optional HoldEnd behavior that can cause animations to apply to property values even if the animation visually appears to be stopped.

Le principe de machine à états est incarné par l’utilisation d’animations dans une table de montage séquentiel dans le cadre du modèle d’état VisualStateManager pour les contrôles.The state machine principle is embodied by the use of storyboarded animations as part of the VisualStateManager state model for controls. Pour plus d’informations sur les animations dans une table de montage séquentiel, voir Animations dans une table de montage.For more info on storyboarded animations, see Storyboarded animations. Pour plus d’informations sur VisualStateManager et sur la définition des états visuels des contrôles, voir Animations dans une table de montage séquentiel pour les états visuels ou Modèles de contrôles.For more info on VisualStateManager and defining visual states for controls, see Storyboarded animations for visual states or Control templates.

Comportement modifié par une propriétéProperty-changed behavior

Le comportement modifié par une propriété est l’origine du côté « dépendance » de la terminologie liée aux propriétés de dépendance.Property-changed behavior is the origin of the "dependency" part of dependency property terminology. Le maintien de valeurs valides pour une propriété quand une autre propriété peut influencer la valeur de la première propriété constitue un problème de développement difficile dans de nombreuses infrastructures.Maintaining valid values for a property when another property can influence the first property's value is a difficult development problem in many frameworks. Dans le système de propriétés Windows Runtime, chaque propriété de dépendance peut spécifier un rappel qui est invoqué dès lors que sa valeur change.In the Windows Runtime property system, each dependency property can specify a callback that is invoked whenever its property value changes. Ce rappel peut servir à notifier ou modifier des valeurs de propriété associées, d’une manière généralement synchrone.This callback can be used to notify or change related property values, in a generally synchronous manner. De nombreuses propriétés de dépendance ont un comportement modifié par une propriété.Many existing dependency properties have a property-changed behavior. Vous pouvez également ajouter un comportement de rappel similaire à des propriétés de dépendance personnalisées, puis implémenter vos propres rappels modifiés par une propriété.You can also add similar callback behavior to custom dependency properties, and implement your own property-changed callbacks. Pour obtenir un exemple, voir Propriétés de dépendance personnalisées.See Custom dependency properties for an example.

Windows 10 introduit la méthode RegisterPropertyChangedCallback.Windows 10 introduces the RegisterPropertyChangedCallback method. Cette méthode permet au code d’application de s’inscrire aux notifications de modification lorsque la propriété de dépendance spécifiée est modifiée sur une instance de DependencyObject.This enables application code to register for change notifications when the specified dependency property is changed on an instance of DependencyObject.

Valeur par défaut et ClearValueDefault value and ClearValue

Une propriété de dépendance peut avoir une valeur par défaut définie dans le cadre de ses métadonnées.A dependency property can have a default value defined as part of its property metadata. Dans le cas d’une propriété de dépendance, sa valeur par défaut ne perd pas de sa pertinence après la définition de la valeur pour la première fois.For a dependency property, its default value doesn't become irrelevant after the property's been set the first time. La valeur par défaut peut s’appliquer à nouveau au moment de l’exécution dès lors qu’un autre déterminant de la priorité de la valeur disparaît.The default value might apply again at run-time whenever some other determinant in value precedence disappears. (La priorité de la valeur de la propriété de dépendance est expliquée dans la section suivante.) Par exemple, vous pouvez volontairement supprimer une valeur de style ou une animation qui s’applique à une propriété, tout en souhaitant que la valeur soit une valeur par défaut raisonnable par la suite.(Dependency property value precedence is discussed in the next section.) For example, you might deliberately remove a style value or an animation that applies to a property, but you want the value to be a reasonable default after you do so. La valeur par défaut de la propriété de dépendance peut fournir cette valeur, sans qu’il soit nécessaire de définir spécifiquement la valeur de chaque propriété dans le cadre d’une étape supplémentaire.The dependency property default value can provide this value, without needing to specifically set each property's value as an extra step.

Vous pouvez délibérément affecter à la propriété la valeur par défaut même si vous lui avez déjà affecté une valeur locale.You can deliberately set a property to the default value even after you have already set it with a local value. Pour réinitialiser une valeur en valeur par défaut, mais aussi pour activer d’autres participants en priorité qui seraient susceptibles de remplacer la valeur par défaut mais pas une valeur locale, appelez la méthode ClearValue (référencez la propriété à effacer en tant que paramètre de méthode).To reset a value to be the default again, and also to enable other participants in precedence that might override the default but not a local value, call the ClearValue method (reference the property to clear as a method parameter). Il n’est pas toujours souhaitable que la propriété utilise littéralement la valeur par défaut, mais la suppression de la valeur locale et le rétablissement de la valeur par défaut peuvent activer un autre élément en priorité, comme la valeur provenant d’un Style Setter dans un modèle de contrôle.You don't always want the property to literally use the default value, but clearing the local value and reverting to the default value might enable another item in precedence that you want to act now, such as using the value that came from a style setter in a control template.

DependencyObject et ThreadingDependencyObject and threading

Toutes les instances de DependencyObject doivent être créées sur le thread d’interface utilisateur associé au Window actuel qui est affiché par une application Windows Runtime.All DependencyObject instances must be created on the UI thread which is associated with the current Window that is shown by a Windows Runtime app. Bien qu’il soit indispensable de créer chaque DependencyObject sur le thread d’interface utilisateur principal, les objets sont accessibles à l’aide d’une référence de répartiteur en provenance des autres threads, via l’accès à la propriété Dispatcher.Although each DependencyObject must be created on the main UI thread, the objects can be accessed using a dispatcher reference from other threads, by accessing the Dispatcher property. Vous pouvez ensuite appeler des méthodes telles que RunAsync sur l’objet CoreDispatcher et exécuter votre code dans les règles des restrictions de thread sur le thread d’interface utilisateur.Then you can call methods such as RunAsync on the CoreDispatcher object, and execute your code within the rules of thread restrictions on the UI thread.

Les aspects de Threading de DependencyObject sont pertinents, car cela signifie généralement que seul le code qui s’exécute sur le thread d’interface utilisateur peut changer ou même lire la valeur d’une propriété de dépendance.The threading aspects of DependencyObject are relevant because it generally means that only code that runs on the UI thread can change or even read the value of a dependency property. Les problèmes de threads peuvent généralement être évités dans le code d’interface utilisateur classique qui utilise correctement les modèles async et les threads de travail d’arrière-plan.Threading issues can usually be avoided in typical UI code that makes correct use of async patterns and background worker threads. En règle générale, vous rencontrez des problèmes de threads relatifs à DependencyObject uniquement si vous définissez vos propres types DependencyObject et tentez de les utiliser pour des sources de données ou d’autres scénarios avec lesquels DependencyObject n’est pas nécessairement approprié.You typically only run into DependencyObject-related threading issues if you are defining your own DependencyObject types and you attempt to use them for data sources or other scenarios where a DependencyObject isn't necessarily appropriate.

Documentation conceptuelleConceptual material