Priorité de la valeur de propriété de dépendanceDependency Property Value Precedence

Cette rubrique explique comment le fonctionnement du système de propriétés Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) peut affecter la valeur d’une propriété de dépendance, et décrit la priorité selon laquelle les aspects du système de propriétés s’appliquent à la valeur effective d’une propriété.This topic explains how the workings of the Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) property system can affect the value of a dependency property, and describes the precedence by which aspects of the property system apply to the effective value of a property.

PrérequisPrerequisites

Cette rubrique part du principe que vous savez ce que sont les propriétés de dépendance du point de vue d’un consommateur de propriétés de dépendance existantes sur les classes WPFWPF, et que vous avez lu la Vue d’ensemble des propriétés de dépendance.This topic assumes that you understand dependency properties from the perspective of a consumer of existing dependency properties on WPFWPF classes, and have read Dependency Properties Overview. Pour pouvoir suivre les exemples de cette rubrique, vous devez également comprendre langage XAML (eXtensible Application Markup Language)Extensible Application Markup Language (XAML) et savoir comment écrire des applications WPFWPF.To follow the examples in this topic, you should also understand langage XAML (eXtensible Application Markup Language)Extensible Application Markup Language (XAML) and know how to write WPFWPF applications.

Le système de propriétés WPFThe WPF Property System

Le système de propriétés WPFWPF offre un moyen puissant pour faire en sorte que la valeur des propriétés de dépendance soit déterminée par différents facteurs. Il permet de bénéficier de fonctionnalités telles que la validation des propriétés en temps réel et les liaisons tardives, et notifie les propriétés connexes des changements apportés aux valeurs d’autres propriétés.The WPFWPF property system offers a powerful way to have the value of dependency properties be determined by a variety of factors, enabling features such as real-time property validation, late binding, and notifying related properties of changes to values for other properties. L’ordre et la logique exacts utilisés pour déterminer les valeurs des propriétés de dépendance sont relativement complexes.The exact order and logic that is used to determine dependency property values is reasonably complex. Connaître cet ordre vous aidera à éviter les paramètres de propriétés inutiles, et peut également éliminer toute confusion quant aux raisons pour lesquelles une tentative visant à influencer ou à anticiper une valeur de propriété de dépendance n’a pas généré la valeur attendue.Knowing this order will help you avoid unnecessary property setting, and might also clear up confusion over exactly why some attempt to influence or anticipate a dependency property value did not end up resulting in the value you expected.

Les propriétés de dépendance peuvent être « définies » à plusieurs emplacementsDependency Properties Might Be "Set" in Multiple Places

L’exemple suivant est XAMLXAML où la même propriété (Background) a trois différentes « set » les opérations qui peuvent influencer la valeur.The following is example XAMLXAML where the same property (Background) has three different "set" operations that might influence the value.

    <Button Background="Red">
      <Button.Style>
        <Style TargetType="{x:Type Button}">
          <Setter Property="Background" Value="Green"/>
          <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
              <Setter Property="Background" Value="Blue" />
            </Trigger>
          </Style.Triggers>
        </Style>
      </Button.Style>
Click
    </Button>

Ici, quelle sera la couleur appliquée selon vous ? Le rouge, le vert ou le bleu ?Here, which color do you expect will apply—red, green, or blue?

À l’exception des valeurs animées et du forçage, les jeux de propriétés locaux sont définis à la priorité la plus élevée.With the exception of animated values and coercion, local property sets are set at the highest precedence. Si vous définissez une valeur localement, vous pouvez vous attendre à ce qu’elle soit honorée, même au-delà des styles ou des modèles de contrôle.If you set a value locally you can expect that the value will be honored, even above any styles or control templates. Dans cet exemple, Background a la valeur Red localement.Here in the example, Background is set to Red locally. Par conséquent, le style défini dans cette portée, bien qu’il soit un style implicite qui s’appliquerait normalement à tous les éléments de ce type dans cette portée, n’est pas la priorité la plus élevée pour donner le Background propriété sa valeur.Therefore, the style defined in this scope, even though it is an implicit style that would otherwise apply to all elements of that type in that scope, is not the highest precedence for giving the Background property its value. Si vous supprimiez la valeur locale Red de cette instance de Button, le style aurait la priorité et le bouton obtiendrait la valeur Background à partir du style.If you removed the local value of Red from that Button instance, then the style would have precedence and the button would obtain the Background value from the style. Dans le style, les déclencheurs sont prioritaires. Le bouton sera donc bleu si la souris est sur lui, et vert dans le cas contraire.Within the style, triggers take precedence, so the button will be blue if the mouse is over it, and green otherwise.

Liste de priorité de définition de propriété de dépendanceDependency Property Setting Precedence List

Voici l’ordre définitif suivi par le système de propriétés lors de l’affectation des valeurs d’exécution des propriétés de dépendance.The following is the definitive order that the property system uses when assigning the run-time values of dependency properties. La priorité la plus élevée est répertoriée en premier.Highest precedence is listed first. Cette liste étend certaines des généralisations présentées dans la Vue d’ensemble des propriétés de dépendance.This list expands on some of the generalizations made in the Dependency Properties Overview.

  1. Forçage du système de propriétés.Property system coercion. Pour plus d’informations sur le forçage, consultez Forçage, animation et valeur de base plus loin dans cette rubrique.For details on coercion, see Coercion, Animation, and Base Value later in this topic.

  2. Animations actives ou animations avec un comportement de blocage.Active animations, or animations with a Hold behavior. Pour avoir un effet pratique, une animation d’une propriété doit pouvoir être prioritaire par rapport à la valeur de base (non animée), même si cette valeur a été définie localement.In order to have any practical effect, an animation of a property must be able to have precedence over the base (unanimated) value, even if that value was set locally. Pour plus d’informations, consultez Forçage, animation et valeur de base plus loin dans cette rubrique.For details, see Coercion, Animation, and Base Value later in this topic.

  3. Valeur locale.Local value. Une valeur locale peut être définie par l’intermédiaire de la propriété « wrapper », ce qui équivaut également à paramètre comme un élément de propriété ou d’attribut dans XAMLXAML, ou par un appel à la SetValue API à l’aide d’une propriété d’une instance spécifique.A local value might be set through the convenience of the "wrapper" property, which also equates to setting as an attribute or property element in XAMLXAML, or by a call to the SetValue API using a property of a specific instance. Si vous définissez une valeur locale à l’aide d’une liaison ou d’une ressource, celles-ci se comportent chacune en termes de priorité comme si une valeur directe avait été définie.If you set a local value by using a binding or a resource, these each act in the precedence as if a direct value was set.

  4. Propriétés de modèle TemplatedParent.TemplatedParent template properties. Un élément a un TemplatedParent si elle a été créée en tant que partie d’un modèle (un ControlTemplate ou DataTemplate).An element has a TemplatedParent if it was created as part of a template (a ControlTemplate or DataTemplate). Pour plus d’informations sur les cas où ceci est applicable, consultez TemplatedParent plus loin dans cette rubrique.For details on when this applies, see TemplatedParent later in this topic. Dans le modèle, la priorité suivante s’applique :Within the template, the following precedence applies:

    1. Se déclenche à partir du TemplatedParent modèle.Triggers from the TemplatedParent template.

    2. Jeux de propriétés (généralement via XAMLXAML attributs) dans le TemplatedParent modèle.Property sets (typically through XAMLXAML attributes) in the TemplatedParent template.

  5. Style implicite.Implicit style. S’applique uniquement à la propriété Style.Applies only to the Style property. La propriété Style est renseignée par toute ressource de style avec une clé qui correspond au type de cet élément.The Style property is filled by any style resource with a key that matches the type of that element. Cette ressource de style doit exister dans la page ou dans l’application ; la recherche d’une ressource de style implicite ne se poursuit pas dans les thèmes.That style resource must exist either in the page or the application; lookup for an implicit style resource does not proceed into the themes.

  6. Déclencheurs de styles.Style triggers. Déclencheurs dans les styles de page ou d’application (ces styles peuvent être explicites ou implicites, mais pas issus des styles par défaut, qui ont une priorité inférieure).The triggers within styles from page or application (these styles might be either explicit or implicit styles, but not from the default styles, which have lower precedence).

  7. Déclencheurs de modèles.Template triggers. Tout déclencheur d’un modèle dans un style, ou un modèle appliqué directement.Any trigger from a template within a style, or a directly applied template.

  8. Style Setters.Style setters. Valeurs à partir d’un Setter dans les styles de page ou application.Values from a Setter within styles from page or application.

  9. Style (de thème) par défaut.Default (theme) style. Pour plus d’informations sur les cas où ceci est applicable, et sur la relation entre les styles de thème et les modèles dans les styles de thème, consultez Style (de thème) par défaut plus loin dans cette rubrique.For details on when this applies, and how theme styles relate to the templates within theme styles, see Default (Theme) Styles later in this topic. Dans un style par défaut, l’ordre de priorité suivant s’applique :Within a default style, the following order of precedence applies:

    1. Déclencheurs actifs dans le style de thème.Active triggers in the theme style.

    2. Méthodes setter dans le style de thème.Setters in the theme style.

  10. Héritage.Inheritance. Quelques propriétés de dépendance héritent de leurs valeurs d’élément parent à éléments enfants, et n’ont donc pas besoin d’être définies spécifiquement sur chaque élément dans une application.A few dependency properties inherit their values from parent element to child elements, such that they need not be set specifically on each element throughout an application. Pour plus d’informations, consultez Héritage de la valeur de propriété.For details see Property Value Inheritance.

  11. Valeur par défaut issue des métadonnées de propriété de dépendance.Default value from dependency property metadata. Toute propriété de dépendance peut avoir une valeur par défaut établie par l’inscription de cette propriété particulière dans le système de propriétés.Any given dependency property may have a default value as established by the property system registration of that particular property. En outre, les classes dérivées qui héritent d’une propriété de dépendance peuvent substituer ces métadonnées (notamment la valeur par défaut) pour chaque type.Also, derived classes that inherit a dependency property have the option to override that metadata (including the default value) on a per-type basis. Pour plus d’informations, consultez Métadonnées de propriété de dépendance.See Dependency Property Metadata for more information. Étant donné que l’héritage est vérifié avant la valeur par défaut, pour une propriété héritée une valeur par défaut d’élément parent est prioritaire par rapport à un élément enfant.Because inheritance is checked before default value, for an inherited property, a parent element default value takes precedence over a child element. Par conséquent, si une propriété pouvant être héritée n’est définie nulle part, la valeur par défaut spécifiée pour la racine ou le parent est utilisée au lieu de la valeur par défaut de l’élément enfant.Consequently, if an inheritable property is not set anywhere, the default value as specified on the root or parent is used instead of the child element default value.

TemplatedParentTemplatedParent

TemplatedParent en tant qu’élément de priorité ne s’applique pas à une propriété d’un élément que vous déclarez directement dans le balisage d’application standard.TemplatedParent as a precedence item does not apply to any property of an element that you declare directly in standard application markup. Le concept de TemplatedParent existe uniquement pour les éléments enfants dans une arborescence visuelle qui sont créés par l’intermédiaire de l’application du modèle.The TemplatedParent concept exists only for child items within a visual tree that come into existence through the application of the template. Lorsque le système de propriétés recherche le TemplatedParent modèle pour une valeur, il recherche le modèle qui a créé cet élément.When the property system searches the TemplatedParent template for a value, it is searching the template that created that element. Les valeurs des propriétés à partir de la TemplatedParent modèle comportent généralement comme si elles ont été définies comme une valeur locale sur l’élément enfant, mais cette priorité moindre par rapport à la valeur locale existe car les modèles sont potentiellement partagés.The property values from the TemplatedParent template generally act as if they were set as a local value on the child element, but this lesser precedence versus the local value exists because the templates are potentially shared. Pour plus d'informations, consultez TemplatedParent.For details, see TemplatedParent.

Propriété StyleThe Style Property

L’ordre de recherche décrit précédemment s’applique à toutes les propriétés de dépendance possibles sauf une : la Style propriété.The order of lookup described earlier applies to all possible dependency properties except one: the Style property. Le Style propriété est unique, car il ne peut pas elle-même un style, les éléments de priorité 5 à 8 s’appliquent pas.The Style property is unique in that it cannot itself be styled, so the precedence items 5 through 8 do not apply. En outre, l’animation ou le forçage de Style n’est pas recommandé (et l’animation Style nécessiterait une classe d’animation personnalisée).Also, either animating or coercing Style is not recommended (and animating Style would require a custom animation class). Cela nous laisse trois manières qui le Style propriété peut-être être définie :This leaves three ways that the Style property might be set:

  • Style explicite.Explicit style. Le Style propriété est définie directement.The Style property is set directly. Dans la plupart des scénarios, le style n’est pas défini inline. Il est plutôt référencé en tant que ressource, par clé explicite.In most scenarios, the style is not defined inline, but instead is referenced as a resource, by explicit key. Dans ce cas, la propriété Style proprement dite se comporte comme s’il s’agissait d’une valeur locale (élément de priorité 3).In this case the Style property itself acts as if it were a local value, precedence item 3.

  • Style implicite.Implicit style. Le Style propriété n’est pas définie directement.The Style property is not set directly. Toutefois, le Style existe à un certain niveau dans la séquence de recherche de ressource (page, application) et est indexé à l’aide d’une clé de ressource qui correspond au type que le style est appliqué à.However, the Style exists at some level in the resource lookup sequence (page, application) and is keyed using a resource key that matches the type the style is to be applied to. Dans ce cas, le Style fait Office de propriété proprement dite identifié dans la séquence comme élément 5.In this case, the Style property itself acts by a precedence identified in the sequence as item 5. Cette condition peut être détectée à l’aide de DependencyPropertyHelper contre le Style propriété et en recherchant ImplicitStyleReference dans les résultats.This condition can be detected by using DependencyPropertyHelper against the Style property and looking for ImplicitStyleReference in the results.

  • Style par défaut, également appelé style de thème.Default style, also known as theme style. Le Style propriété n’est pas définie directement et sera lue en fait comme null jusqu’au moment de l’exécution.The Style property is not set directly, and in fact will read as null up until run time. Dans ce cas, le style provient de l’évaluation du thème d’exécution qui fait partie du moteur de présentation WPFWPF.In this case, the style comes from the run-time theme evaluation that is part of the WPFWPF presentation engine.

Les styles implicites pas dans les thèmes, le type doit correspondre exactement - un MyButton Button-classe dérivée n’utilisera pas implicitement un style pour Button.For implicit styles not in themes, the type must match exactly - a MyButton Button-derived class will not implicitly use a style for Button.

Style (de thème) par défautDefault (Theme) Styles

Chaque contrôle fourni avec WPFWPF a un style par défaut.Every control that ships with WPFWPF has a default style. Ce style par défaut peut varier en fonction du thème. C’est pourquoi on le nomme parfois « style de thème ».That default style potentially varies by theme, which is why this default style is sometimes referred to as a theme style.

Les informations les plus importantes que l'on trouve dans un style par défaut pour un contrôle est son modèle de contrôle, qui existe dans le style de thème comme un accesseur Set pour son Template propriété.The most important information that is found within a default style for a control is its control template, which exists in the theme style as a setter for its Template property. S’il n’y avait aucun modèle issu des styles par défaut, un contrôle sans modèle personnalisé dans le cadre d’un style personnalisé n’aurait aucune apparence visuelle.If there were no template from default styles, a control without a custom template as part of a custom style would have no visual appearance at all. Le modèle du style par défaut donne une structure de base à l’apparence visuelle de chaque contrôle, et définit également les connexions entre les propriétés définies dans l’arborescence visuelle du modèle et la classe de contrôle correspondante.The template from the default style gives the visual appearance of each control a basic structure, and also defines the connections between properties defined in the visual tree of the template and the corresponding control class. Chaque contrôle expose un ensemble de propriétés qui peuvent influencer l’apparence visuelle du contrôle sans remplacer complètement le modèle.Each control exposes a set of properties that can influence the visual appearance of the control without completely replacing the template. Par exemple, considérez l’apparence visuelle par défaut d’un Thumb contrôle, qui est un composant d’un ScrollBar.For example, consider the default visual appearance of a Thumb control, which is a component of a ScrollBar.

Un Thumb possède certaines propriétés personnalisables.A Thumb has certain customizable properties. Le modèle par défaut d’un Thumb crée une structure de base / arborescence d’éléments visuels avec plusieurs imbriqués Border composants pour créer une apparence de biseau.The default template of a Thumb creates a basic structure / visual tree with several nested Border components to create a bevel look. Si une propriété qui fait partie du modèle est destinée à être exposé pour la personnalisation par le Thumb classe, alors cette propriété doit être exposée par un TemplateBinding, dans le modèle.If a property that is part of the template is intended to be exposed for customization by the Thumb class, then that property must be exposed by a TemplateBinding, within the template. Dans le cas de Thumb, différentes propriétés de ces bordures partagent une liaison de modèle aux propriétés telles que Background ou BorderThickness.In the case of Thumb, various properties of these borders share a template binding to properties such as Background or BorderThickness. En revanche, certaines autres propriétés ou dispositions visuelles sont codées en dur dans le modèle de contrôle ou sont liées à des valeurs qui proviennent directement du thème, et ne peuvent pas être changées à moins de remplacer le modèle entier.But certain other properties or visual arrangements are hard-coded into the control template or are bound to values that come directly from the theme, and cannot be changed short of replacing the entire template. En règle générale, si une propriété provient d’un parent basé sur un modèle et n’est pas exposée par une liaison de modèle, elle ne peut pas être ajustée par des styles car il n’existe aucun moyen simple de la cibler.Generally, if a property comes from a templated parent and is not exposed by a template binding, it cannot be adjusted by styles because there is no easy way to target it. Mais cette propriété peut toujours être influencée par l’héritage de valeur de propriété dans le modèle appliqué, ou par la valeur par défaut.But that property could still be influenced by property value inheritance in the applied template, or by default value.

Les styles de thème utilisent un type comme clé dans leurs définitions.The theme styles use a type as the key in their definitions. Toutefois, lorsque les thèmes sont appliqués à une instance de l’élément donné, la recherche de thème pour ce type est effectuée en vérifiant la DefaultStyleKey propriété sur un contrôle.However, when themes are applied to a given element instance, themes lookup for this type is performed by checking the DefaultStyleKey property on a control. Ce comportement est à contraster avec l’utilisation du littéral Type (par les styles implicites).This is in contrast to using the literal Type, as implicit styles do. La valeur de DefaultStyleKey hériterait aux classes dérivées, même si l’implémenteur n’a pas changé (la manière prévue de la modification de la propriété est non à substituer au niveau de la propriété, mais de modifier sa valeur par défaut dans les métadonnées de propriété).The value of DefaultStyleKey would inherit to derived classes even if the implementer did not change it (the intended way of changing the property is not to override it at the property level, but to instead change its default value in property metadata). Cette indirection permet aux classes de base de définir les styles de thème pour les éléments dérivés qui ne disposent pas de style (ou, plus important encore, qui n’ont pas de modèle dans ce style et n’auraient donc aucune apparence visuelle par défaut).This indirection enables base classes to define the theme styles for derived elements that do not otherwise have a style (or more importantly, do not have a template within that style and would thus have no default visual appearance at all). Par conséquent, vous pouvez dériver MyButton de Button et toujours obtenir le Button modèle par défaut.Thus, you can derive MyButton from Button and will still get the Button default template. Si vous étiez l’auteur du contrôle MyButton et que vous souhaitiez un comportement différent, vous pourriez substituer les métadonnées de propriété de dépendance pour DefaultStyleKey sur MyButton pour retourner une clé différente, puis définir les styles de thème pertinents, y compris le modèle pour MyButton que vous devez empaqueter avec votre MyButton contrôle.If you were the control author of MyButton and you wanted a different behavior, you could override the dependency property metadata for DefaultStyleKey on MyButton to return a different key, and then define the relevant theme styles including template for MyButton that you must package with your MyButton control. Pour plus d’informations sur les thèmes, les styles et la création de contrôles, consultez Vue d’ensemble de la création de contrôles.For more details on themes, styles, and control authoring, see Control Authoring Overview.

Références de ressources dynamiques et liaisonDynamic Resource References and Binding

Les opérations de liaison et les références de ressources dynamiques respectent la priorité de l’emplacement auquel elles sont définies.Dynamic resource references and binding operations respect the precedence of the location at which they are set. Par exemple, une ressource dynamique appliquée à une valeur locale agit conformément à l’élément de priorité 3, une liaison pour une méthode setter de propriété dans un style de thème s’applique à l’élément de priorité 9, et ainsi de suite.For example, a dynamic resource applied to a local value acts per precedence item 3, a binding for a property setter within a theme style applies at precedence item 9, and so on. Étant donné que les références de ressources dynamiques et la liaison doivent pouvoir obtenir des valeurs à partir de l’état d’exécution de l’application, cela implique que le processus de détermination de la priorité de valeur de propriété pour une propriété donnée s’étend également au moment de l’exécution.Because dynamic resource references and binding must both be able to obtain values from the run time state of the application, this entails that the actual process of determining the property value precedence for any given property extends into the run time as well.

Les références de ressources dynamiques ne font pas à proprement parler partie du système de propriétés, mais elles ont leur propre ordre de recherche qui interagit avec la séquence indiquée ci-dessus.Dynamic resource references are not strictly speaking part of the property system, but they do have a lookup order of their own which interacts with the sequence listed above. Cette priorité est documentée plus en détail dans les Ressources XAML.That precedence is documented more thoroughly in the XAML Resources. Il s’agit en gros de la priorité suivante : élément à racine de la page, application, thème, système.The basic summation of that precedence is: element to page root, application, theme, system.

Les ressources dynamiques et les liaisons ont la priorité de l’emplacement où elles ont été définies, mais la valeur est différée.Dynamic resources and bindings have the precedence of where they were set, but the value is deferred. L’une des conséquences de cela est que si vous affectez une valeur locale à une ressource dynamique ou une liaison, tout changement apporté à la valeur locale remplace entièrement la ressource dynamique ou la liaison.One consequence of this is that if you set a dynamic resource or binding to a local value, any change to the local value replaces the dynamic resource or binding entirely. Même si vous appelez le ClearValue méthode pour effacer définie localement valeur, la ressource dynamique ou la liaison n’est pas restaurée.Even if you call the ClearValue method to clear the locally set value, the dynamic resource or binding will not be restored. En fait, si vous appelez ClearValue sur une propriété qui a une liaison ou une ressource dynamique en place (sans aucune valeur locale littérale), elles sont désactivées par la ClearValue appeler trop.In fact, if you call ClearValue on a property that has a dynamic resource or binding in place (with no literal local value), they are cleared by the ClearValue call too.

SetCurrentValueSetCurrentValue

Le SetCurrentValue méthode est une autre façon de définir une propriété, mais il n’est pas dans l’ordre de priorité.The SetCurrentValue method is another way to set a property, but it is not in the order of precedence. Au lieu de cela, SetCurrentValue vous permet de modifier la valeur d’une propriété sans remplacer la source d’une valeur précédente.Instead, SetCurrentValue enables you to change the value of a property without overwriting the source of a previous value. Vous pouvez utiliser SetCurrentValue chaque fois que vous souhaitez définir une valeur sans lui donner la priorité d’une valeur locale.You can use SetCurrentValue any time that you want to set a value without giving that value the precedence of a local value. Par exemple, si une propriété est définie par un déclencheur puis affectée une autre valeur via SetCurrentValue, le système de propriétés respectera encore le déclencheur et la propriété changera si l’action du déclencheur se produit.For example, if a property is set by a trigger and then assigned another value via SetCurrentValue, the property system still respects the trigger and the property will change if the trigger’s action occurs. SetCurrentValue permet de modifier la valeur de propriété sans lui donner une source avec une priorité plus élevée.SetCurrentValue enables you to change the property’s value without giving it a source with a higher precedence. De même, vous pouvez utiliser SetCurrentValue pour modifier la valeur d’une propriété sans remplacer une liaison.Likewise, you can use SetCurrentValue to change the value of a property without overwriting a binding.

Forçage, animations et valeur de baseCoercion, Animations, and Base Value

Le forçage et l’animation agissent tous deux sur une valeur appelée « valeur de base » dans ce SDKSDK.Coercion and animation both act on a value that is termed as the "base value" throughout this SDKSDK. La valeur de base est donc toute valeur déterminée par l’intermédiaire d’une évaluation vers le haut parmi les éléments jusqu’à ce que l’élément 2 soit atteint.The base value is thus whatever value is determined through evaluating upwards in the items until item 2 is reached.

Pour une animation, la valeur de base peut avoir un effet sur la valeur animée, si cette animation ne spécifie pas à la fois « From » et « To » pour certains comportements, ou si l’animation rétablit délibérément la valeur de base une fois terminé.For an animation, the base value can have an effect on the animated value, if that animation does not specify both "From" and "To" for certain behaviors, or if the animation deliberately reverts to the base value when completed. Pour voir cela en pratique, exécutez l’Exemple de valeurs cibles d’animation From, To et By.To see this in practice, run the From, To, and By Animation Target Values Sample. Essayez de définir les valeurs locales de la hauteur du rectangle dans l’exemple, telles que la valeur locale initiale soit différente de toute valeur « From » dans l’animation.Try setting the local values of the rectangle height in the example, such that the initial local value differs from any "From" in the animation. Vous noterez que les animations démarrent immédiatement en utilisant les valeurs « From », et qu’elles remplacent la valeur de base une fois qu’elles ont commencé.You will note that the animations start right away using the "From" values and replace the base value once started. L’animation peut spécifier de retourner à la valeur trouvée avant l’animation une fois celle-ci terminée en spécifiant arrêt FillBehavior.The animation might specify to return to the value found before animation once it is completed by specifying the Stop FillBehavior. Par la suite, la priorité normale est utilisée pour déterminer la valeur de base.Afterwards, normal precedence is used for the base value determination.

Plusieurs animations peuvent être appliquées à une même propriété, chacune de ces animations ayant éventuellement été définie à partir de points différents dans la priorité de la valeur.Multiple animations might be applied to a single property, with each of these animations possibly having been defined from different points in the value precedence. Toutefois, ces animations créeront peut-être une valeur composite à partir de leurs valeurs, plutôt que d’appliquer simplement l’animation à partir de la priorité la plus élevée.However, these animations will potentially composite their values, rather than just applying the animation from the higher precedence. 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 sur l’animation de propriétés, consultez Vue d’ensemble de l’animation.For more information about animating properties, see Animation Overview.

Le forçage s’applique au niveau le plus élevé.Coercion applies at the highest level of all. Même une animation en cours d’exécution est sujette au forçage de valeur.Even an already running animation is subject to value coercion. Certaines propriétés de dépendance existantes dans WPFWPF ont un forçage intégré.Certain existing dependency properties in WPFWPF have built-in coercion. Pour une propriété de dépendance personnalisée, vous définissez le comportement de forçage de type pour une propriété de dépendance personnalisée en écrivant un CoerceValueCallback et en passant le rappel dans le cadre des métadonnées lorsque vous créez la propriété.For a custom dependency property, you define the coercion behavior for a custom dependency property by writing a CoerceValueCallback and passing the callback as part of metadata when you create the property. Vous pouvez également substituer le comportement de forçage d’une propriété existante en substituant les métadonnées de cette propriété dans une classe dérivée.You can also override coercion behavior of existing properties by overriding the metadata on that property in a derived class. Le forçage interagit avec la valeur de base de telle façon que les contraintes du forçage soient appliquées telles qu’elles existent à ce moment précis, mais la valeur de base est quand même conservée.Coercion interacts with the base value in such a way that the constraints on coercion are applied as those constraints exist at the time, but the base value is still retained. Par conséquent, si des contraintes du forçage sont par la suite levées, le forçage retourne la valeur la plus proche possible de cette valeur de base, et l’influence du forçage sur une propriété peut cesser dès que toutes les contraintes sont levées.Therefore, if constraints in coercion are later lifted, the coercion will return the closest value possible to that base value, and potentially the coercion influence on a property will cease as soon as all constraints are lifted. Pour plus d’informations sur le comportement de forçage, consultez Validation et rappels de propriétés de dépendance.For more information about coercion behavior, see Dependency Property Callbacks and Validation.

Comportements des déclencheursTrigger Behaviors

Les contrôles définissent souvent les comportements des déclencheurs dans le cadre de leur style par défaut dans les thèmes.Controls often define trigger behaviors as part of their default style in themes. La définition de propriétés locales sur des contrôles peut empêcher les déclencheurs de répondre à des événements pilotés par l’utilisateur visuellement ou par comportement.Setting local properties on controls might prevent the triggers from being able to respond to user-driven events either visually or behaviorally. L’utilisation la plus courante d’un déclencheur de propriété est pour les propriétés de contrôle ou d’état comme IsSelected.The most common use of a property trigger is for control or state properties such as IsSelected. Par exemple, par défaut lorsqu’un Button est désactivé (déclencher pour IsEnabled est false) le Foreground valeur dans le style de thème est ce qui force le contrôle s’affiche « grisée ».For example, by default when a Button is disabled (trigger for IsEnabled is false) then the Foreground value in the theme style is what causes the control to appear "grayed out". Mais si vous avez défini une variable locale Foreground que normale couleur grisée prévaut dans la priorité de votre jeu de propriétés locales, même dans ce scénario déclenché à la propriété de la valeur.But if you have set a local Foreground value, that normal gray-out color will be overruled in precedence by your local property set, even in this property-triggered scenario. Soyez prudent quand vous définissez des valeurs pour des propriétés qui ont des comportements de déclenchement au niveau du thème, et vérifiez que vous n’interférez pas indûment avec l’expérience utilisateur prévue pour ce contrôle.Be cautious of setting values for properties that have theme-level trigger behaviors and make sure you are not unduly interfering with the intended user experience for that control.

ClearValue et priorité de valeurClearValue and Value Precedence

Le ClearValue méthode fournit un moyen pratique pour effacer toute valeur appliquée localement à partir d’une propriété de dépendance qui est définie sur un élément.The ClearValue method provides an expedient means to clear any locally applied value from a dependency property that is set on an element. Toutefois, l’appel ClearValue n’est pas une garantie que la valeur par défaut établie dans les métadonnées pendant l’inscription de propriété est la nouvelle valeur effective.However, calling ClearValue is not a guarantee that the default as established in metadata during property registration is the new effective value. Tous les autres participants à la séquence de priorité de valeur sont toujours actifs.All of the other participants in value precedence are still active. Seule la valeur définie localement a été supprimée de la séquence de priorité.Only the locally set value has been removed from the precedence sequence. Par exemple, si vous appelez ClearValue sur une propriété où cette propriété est également définie par un style de thème, puis la valeur de thème est appliquée en tant que la nouvelle valeur plutôt que la valeur par défaut basée sur les métadonnées.For example, if you call ClearValue on a property where that property is also set by a theme style, then the theme value is applied as the new value rather than the metadata-based default. Si vous souhaitez que tous les participants de valeur de propriété hors du processus et définissez la valeur sur la valeur par défaut de métadonnées enregistrée, vous pouvez obtenir que valeur par défaut définitivement en interrogeant les métadonnées de propriété de dépendance et que vous pouvez utiliser la valeur par défaut à localement définir la propriété avec un appel à SetValue.If you want to take all property value participants out of the process and set the value to the registered metadata default, you can obtain that default value definitively by querying the dependency property metadata, and then you can use the default value to locally set the property with a call to SetValue.

Voir aussiSee also