Prioridad de los valores de propiedades de dependenciaDependency Property Value Precedence

En este tema se explica cómo puede afectar el trabajo del sistema de propiedades de Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) al valor de una propiedad de dependencia y se describe la precedencia de aplicación de los aspectos del sistema de propiedades al valor efectivo de una propiedad.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.

Requisitos previosPrerequisites

En este tema, se supone que entiende las propiedades de dependencia desde la perspectiva de un consumidor de propiedades de dependencia existentes en las clases WPFWPF y que ha leído Información general sobre las propiedades de dependencia.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. Para seguir los ejemplos de este tema, también debe comprender el lenguaje Lenguaje XAML (Extensible Application Markup Language)Extensible Application Markup Language (XAML) y saber cómo escribir aplicaciones de WPFWPF.To follow the examples in this topic, you should also understand Lenguaje XAML (Extensible Application Markup Language)Extensible Application Markup Language (XAML) and know how to write WPFWPF applications.

Sistema de propiedades de WPFThe WPF Property System

El sistema de propiedades de WPFWPF permite que el valor de las propiedades de dependencia se determine de forma eficaz mediante una serie de factores, que habilita características como la validación de propiedades en tiempo real, el enlace en tiempo de ejecución y la notificación de propiedades relacionadas de cambios a valores de otras propiedades.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. El orden y la lógica exactos que se usan para determinar los valores de las propiedades de dependencia son bastante complejos.The exact order and logic that is used to determine dependency property values is reasonably complex. Conocer este orden le evitará establecer propiedades innecesarias y puede eliminar la confusión sobre el motivo por el que un intento de influir en el valor de una propiedad de dependencia o de anticiparlo no dio como resultado el valor esperado.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.

Las propiedades de dependencia podrían ser "set" en varios lugaresDependency Properties Might Be "Set" in Multiple Places

El siguiente es ejemplo XAMLXAML donde la misma propiedad (Background) han tres diferentes "set" operaciones que podrían influir en el valor.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>

¿Qué color espera que se aplique aquí: rojo, verde o azul?Here, which color do you expect will apply—red, green, or blue?

A excepción de los valores animados y la coerción, los conjuntos de propiedades locales se establecen con la precedencia más alta.With the exception of animated values and coercion, local property sets are set at the highest precedence. Si establece un valor localmente, puede esperar que este se respete, incluso por encima de cualquier estilo o plantilla de control.If you set a value locally you can expect that the value will be honored, even above any styles or control templates. Aquí en el ejemplo, Background se establece en Red localmente.Here in the example, Background is set to Red locally. Por lo tanto, el estilo definido en este ámbito, incluso aunque se trate de un estilo implícito que se aplicaría a todos los elementos de ese tipo en ese ámbito, no es la prioridad más alta para dar el Background propiedad su valor.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. En el caso de quitar el valor local de Red desde esa instancia de Button, el estilo tendría precedencia y el botón obtendría el valor de Background del estilo.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. Dentro del estilo, los desencadenadores tienen precedencia, por lo que el botón será azul si el mouse está encima de él y verde en caso contrario.Within the style, triggers take precedence, so the button will be blue if the mouse is over it, and green otherwise.

Lista de precedencia de configuración de propiedades de dependenciaDependency Property Setting Precedence List

El siguiente es el orden definitivo que usa el sistema de propiedades al asignar los valores de tiempo de ejecución de las propiedades de dependencia.The following is the definitive order that the property system uses when assigning the run-time values of dependency properties. La precedencia más alta aparece primero.Highest precedence is listed first. Esta lista desarrolla algunas de las generalizaciones realizadas en la Información general sobre las propiedades de dependencia.This list expands on some of the generalizations made in the Dependency Properties Overview.

  1. Coerción del sistema de propiedades.Property system coercion. Para obtener más información sobre la coerción, consulte Coerción, animación y valor base más adelante en este tema.For details on coercion, see Coercion, Animation, and Base Value later in this topic.

  2. Animaciones activas o animaciones con un comportamiento Hold.Active animations, or animations with a Hold behavior. Para tener cualquier efecto práctico, una animación de una propiedad debe poder tener precedencia sobre el valor base (inanimado), aunque dicho valor se estableciera localmente.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. Para obtener más información, consulte Coerción, animación y valor base más adelante en este tema.For details, see Coercion, Animation, and Base Value later in this topic.

  3. Valor local.Local value. Un valor local se puede establecer a través de la comodidad de la propiedad "contenedor", que también equivale a establecerlo como un atributo o elemento de propiedad en XAMLXAML, o mediante una llamada a la SetValue APIAPI utilizando una propiedad de una instancia específica.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 APIAPI using a property of a specific instance. Si establece un valor local mediante un enlace o un recurso, cada uno de estos actuará con la precedencia como si se hubiese establecido un valor directo.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. Propiedades de la plantilla TemplatedParent.TemplatedParent template properties. Un elemento tiene un TemplatedParent si se ha creado como parte de una plantilla (una ControlTemplate o DataTemplate).An element has a TemplatedParent if it was created as part of a template (a ControlTemplate or DataTemplate). Para obtener más información sobre cuándo se aplica el caso anterior, consulte TemplatedParent más adelante en este tema.For details on when this applies, see TemplatedParent later in this topic. En la plantilla, se aplica la siguiente precedencia:Within the template, the following precedence applies:

    1. Se desencadena a partir del TemplatedParent plantilla.Triggers from the TemplatedParent template.

    2. Conjuntos de propiedades (normalmente a través XAMLXAML atributos) en el TemplatedParent plantilla.Property sets (typically through XAMLXAML attributes) in the TemplatedParent template.

  5. Estilo implícito.Implicit style. Solo se aplica a la propiedad Style.Applies only to the Style property. La propiedad Style se rellena con cualquier recurso de estilo que tenga una clave que coincida con el tipo de ese elemento.The Style property is filled by any style resource with a key that matches the type of that element. Ese recurso de estilo debe existir en la página o la aplicación; la búsqueda de un recurso de estilo implícito no continúa en los temas.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. Desencadenadores de estilo.Style triggers. Desencadenadores dentro de los estilos de una página o aplicación (estos estilos pueden ser explícitos o implícitos, pero no pueden ser predeterminados, con una precedencia más baja).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. Desencadenadores de plantilla.Template triggers. Cualquier desencadenador de una plantilla dentro de un estilo o una plantilla aplicada directamente.Any trigger from a template within a style, or a directly applied template.

  8. Establecedores de estilo.Style setters. Los valores de un Setter dentro de estilos de página o aplicación.Values from a Setter within styles from page or application.

  9. Estilo (tema) predeterminado.Default (theme) style. Para obtener más información sobre cuándo se aplica y cómo se relacionan los estilos de tema con las plantillas dentro de los estilos de tema, consulte Estilos (temas) predeterminados más adelante en este tema.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. Dentro de un estilo predeterminado, se aplica el orden de precedencia siguiente:Within a default style, the following order of precedence applies:

    1. Desencadenadores activos del estilo de tema.Active triggers in the theme style.

    2. Establecedores del estilo de tema.Setters in the theme style.

  10. Herencia.Inheritance. Algunas propiedades de dependencia heredan sus valores del elemento primario a los elementos secundarios, de manera que no se tienen que establecer específicamente en cada elemento de una aplicación.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. Para obtener información detallada, consulte Herencia de valores de propiedad.For details see Property Value Inheritance.

  11. Valor predeterminado de los metadatos de las propiedades de dependencia.Default value from dependency property metadata. Cualquier propiedad de dependencia puede tener un valor predeterminado establecido en el registro del sistema de propiedades de esa propiedad concreta.Any given dependency property may have a default value as established by the property system registration of that particular property. Además, las clases derivadas que heredan una propiedad de dependencia tienen la opción de invalidar esos metadatos (incluido el valor predeterminado) por tipo.Also, derived classes that inherit a dependency property have the option to override that metadata (including the default value) on a per-type basis. Para obtener más información, consulte Metadados de las propiedades de dependencia.See Dependency Property Metadata for more information. Puesto que la herencia se comprueba antes que el valor predeterminado, para una propiedad heredada, un valor predeterminado de un elemento primario tiene precedencia sobre un elemento secundario.Because inheritance is checked before default value, for an inherited property, a parent element default value takes precedence over a child element. Por consiguiente, si una propiedad heredable no está establecida en ningún lugar, se usa el valor predeterminado tal como se especifica en la raíz o el elemento primario, en lugar del valor predeterminado del elemento secundario.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, como un elemento de precedencia, no se aplica a ninguna propiedad de un elemento que se declara directamente en la marcación de aplicación estándar.TemplatedParent as a precedence item does not apply to any property of an element that you declare directly in standard application markup. El concepto de TemplatedParent existe solo para los elementos secundarios dentro de un árbol visual que se genera a través de la aplicación de la plantilla.The TemplatedParent concept exists only for child items within a visual tree that come into existence through the application of the template. Cuando el sistema de propiedades busca el TemplatedParent plantilla para un valor, busca en la plantilla que creó ese elemento.When the property system searches the TemplatedParent template for a value, it is searching the template that created that element. Los valores de propiedad de la TemplatedParent plantilla generalmente actúan como si estuvieran establecidos como un valor local en el elemento secundario, pero esta precedencia menor en comparación con el valor local existe porque las plantillas se comparten potencialmente.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. Para obtener información detallada, vea TemplatedParent.For details, see TemplatedParent.

Propiedad StyleThe Style Property

El orden de búsqueda descrito anteriormente se aplica a todas las propiedades de dependencia posibles excepto una: la Style propiedad.The order of lookup described earlier applies to all possible dependency properties except one: the Style property. El Style propiedad es única en el sentido de no se puede estilos a sí misma, por lo que no se aplican los elementos de prioridad 5 a 8.The Style property is unique in that it cannot itself be styled, so the precedence items 5 through 8 do not apply. Además, la animación o coerción Style no se recomienda (y animar Style requeriría una clase de animación personalizada).Also, either animating or coercing Style is not recommended (and animating Style would require a custom animation class). Esto deja tres maneras de que el Style se puede establecer la propiedad:This leaves three ways that the Style property might be set:

  • Estilo explícito.Explicit style. El Style propiedad se establece directamente.The Style property is set directly. En la mayoría de los escenarios, el estilo no se define en línea, sino que se hace referencia a este como un recurso, por la clave explícita.In most scenarios, the style is not defined inline, but instead is referenced as a resource, by explicit key. En este caso, la propia propiedad Style actúa como si fuera un valor local, el elemento de precedencia 3.In this case the Style property itself acts as if it were a local value, precedence item 3.

  • Estilo implícito.Implicit style. El Style propiedad no se establece directamente.The Style property is not set directly. Sin embargo, el Style existe en algún nivel de la secuencia de búsqueda de recursos (página, aplicación) y se codifica mediante una clave de recurso que coincida con el tipo es el estilo que se aplicará a.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. En este caso, el Style propia propiedad actúa por una precedencia identificada en la secuencia como el elemento 5.In this case, the Style property itself acts by a precedence identified in the sequence as item 5. Esta condición se puede detectar mediante el uso de DependencyPropertyHelper contra la Style propiedad y buscando ImplicitStyleReference en los resultados.This condition can be detected by using DependencyPropertyHelper against the Style property and looking for ImplicitStyleReference in the results.

  • Estilo predeterminado, también conocido como estilo del tema.Default style, also known as theme style. El Style propiedad no se establece directamente y, de hecho, se leerá como null hasta el tiempo de ejecución.The Style property is not set directly, and in fact will read as null up until run time. En este caso, el estilo procede de la evaluación del tema en tiempo de ejecución que forma parte del motor de presentación de WPFWPF.In this case, the style comes from the run-time theme evaluation that is part of the WPFWPF presentation engine.

Para los estilos implícitos no en los temas, el tipo debe coincidir exactamente - un MyButton Button-clase derivada no usará de manera implícita un estilo para 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.

Estilos (temas) predeterminadosDefault (Theme) Styles

Todos los controles que se suministran con WPFWPF tienen un estilo predeterminado.Every control that ships with WPFWPF has a default style. Ese estilo predeterminado puede variar según el tema, motivo por el cual se denomina a veces "estilo de tema".That default style potentially varies by theme, which is why this default style is sometimes referred to as a theme style.

La información más importante que se encuentra dentro de un estilo predeterminado para un control es su plantilla de control, que existe en el estilo del tema como un establecedor de su Template propiedad.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. Si no hubiera ninguna plantilla en los estilos predeterminados, un control sin una plantilla personalizada como parte de un estilo personalizado no tendría ninguna apariencia visual.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. La plantilla del estilo predeterminado proporciona a la apariencia visual de cada control una estructura básica, además de definir las conexiones entre las propiedades definidas en el árbol visual de la plantilla y la clase de control correspondiente.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. Cada control expone un conjunto de propiedades que puede influir en la apariencia visual del control sin reemplazar completamente la plantilla.Each control exposes a set of properties that can influence the visual appearance of the control without completely replacing the template. Por ejemplo, considere la apariencia visual predeterminada de un Thumb control, que es un componente de un ScrollBar.For example, consider the default visual appearance of a Thumb control, which is a component of a ScrollBar.

Un Thumb tiene ciertas propiedades personalizables.A Thumb has certain customizable properties. La plantilla predeterminada de un Thumb crea una estructura básica o anidados del árbol visual con varios Border componentes para crear una apariencia biselada.The default template of a Thumb creates a basic structure / visual tree with several nested Border components to create a bevel look. Si una propiedad que forma parte de la plantilla debe presentarse para la personalización mediante la Thumb clase, a continuación, esa propiedad debe exponerse mediante un TemplateBinding, dentro de la plantilla.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. En el caso de Thumb, las distintas propiedades de estos bordes comparten un enlace de plantilla a propiedades como Background o BorderThickness.In the case of Thumb, various properties of these borders share a template binding to properties such as Background or BorderThickness. No obstante, otras propiedades u organizaciones visuales están codificadas de forma rígida en la plantilla de control o enlazadas a valores que proceden directamente del tema, y no se pueden cambiar a poco de reemplazar la plantilla completa.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. Por lo general, si una propiedad procede de un elemento primario con plantilla y no se expone mediante un enlace a plantilla, no puede ajustarse mediante estilos porque no hay ninguna forma sencilla de establecerla como destino.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. No obstante, aún se podría influir en esa propiedad mediante la herencia de valores de propiedad de la plantilla aplicada o el valor predeterminado.But that property could still be influenced by property value inheritance in the applied template, or by default value.

Los estilos de tema usan un tipo como clave en sus definiciones.The theme styles use a type as the key in their definitions. Sin embargo, cuando se aplican temas a una instancia de un elemento determinado, búsqueda de temas de este tipo se realiza comprobando la DefaultStyleKey propiedad en un control.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. Esto es lo contrario a usar el literal Type, como hacen los estilos implícitos.This is in contrast to using the literal Type, as implicit styles do. El valor de DefaultStyleKey heredaría en las clases derivadas, incluso si el implementador no lo cambiara (la forma prevista de cambiar la propiedad es no invalidarla en el nivel de propiedad, pero que en su lugar, cambiar su valor predeterminado en los metadatos de propiedad).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). Este direccionamiento indirecto permite que las clases base definan los estilos de tema de elementos derivados que, de lo contrario, no tendrían ningún estilo (o más importante aún, no tendrían ninguna plantilla dentro de ese estilo y no tendrían, por tanto, ninguna apariencia visual predeterminada en absoluto).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). Por lo tanto, puede derivar MyButton desde Button y seguirá obteniendo el Button plantilla predeterminada.Thus, you can derive MyButton from Button and will still get the Button default template. Si fuera el autor del control de MyButton y quisiera un comportamiento diferente, podría invalidar los metadatos de propiedad de dependencia de DefaultStyleKey en MyButton para devolver una clave diferente y, a continuación, defina los estilos de tema pertinentes como plantilla para MyButton que se debe empaquetar con su MyButton control.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. Para obtener más detalles sobre los temas, los estilos y la creación de controles, consulte Información general sobre la creación de controles.For more details on themes, styles, and control authoring, see Control Authoring Overview.

Enlace y referencias de recursos dinámicosDynamic Resource References and Binding

Las operaciones de enlace y referencias de recursos dinámicos respetan la precedencia de la ubicación en la que están establecidas.Dynamic resource references and binding operations respect the precedence of the location at which they are set. Por ejemplo, un recurso dinámico aplicado a un valor local actúa por elemento de precedencia 3, un enlace para un establecedor de propiedad dentro de un estilo de tema se aplica al elemento de precedencia 9 y así sucesivamente.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. Dado que el enlace y las referencias de recursos dinámicos deben ser capaces de obtener los valores del estado de tiempo de ejecución de la aplicación, esto implica que el proceso real de determinar la precedencia de los valores de propiedad para cualquier propiedad determinada se extiende también al tiempo de ejecución.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.

Las referencias de recursos dinámicos no forman parte del sistema de propiedades en sentido estricto, pero tienen un orden de búsqueda propio que interactúa con la secuencia citada anteriormente.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. Esa precedencia se documenta con más detalle en Recursos XAML.That precedence is documented more thoroughly in the XAML Resources. El resumen básico de esa precedencia es: elemento a raíz de la página, aplicación, tema y sistema.The basic summation of that precedence is: element to page root, application, theme, system.

Los enlaces y los recursos dinámicos tienen la precedencia de donde se establecieron, pero el valor se aplaza.Dynamic resources and bindings have the precedence of where they were set, but the value is deferred. Una consecuencia de esto es que, si establece un recurso dinámico o un enlace en un valor local, cualquier cambio en el valor local reemplazará el recurso dinámico o el enlace completamente.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. Incluso si se llama a la ClearValue método borrar establecida localmente no se restaurará el valor, el recurso dinámico o el enlace.Even if you call the ClearValue method to clear the locally set value, the dynamic resource or binding will not be restored. De hecho, si se llama a ClearValue en una propiedad que tiene un recurso dinámico o un enlace implementado (sin ningún valor local literal), se borrarán los ClearValue llamar demasiado.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

El SetCurrentValue método es otra forma de establecer una propiedad, pero no está en el orden de prioridad.The SetCurrentValue method is another way to set a property, but it is not in the order of precedence. En su lugar, SetCurrentValue le permite cambiar el valor de una propiedad sin sobrescribir el origen de un valor anterior.Instead, SetCurrentValue enables you to change the value of a property without overwriting the source of a previous value. Puede usar SetCurrentValue cada vez que se desea establecer un valor sin tener que proporcionar ese valor de la prioridad de un valor local.You can use SetCurrentValue any time that you want to set a value without giving that value the precedence of a local value. Por ejemplo, si se establece mediante un desencadenador y, a continuación, asigne otro valor a través de una propiedad SetCurrentValue, el sistema de propiedades sigue respetando el desencadenador y la propiedad cambiará si se produce la acción del desencadenador.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 le permite cambiar el valor de propiedad sin proporcionarle un origen con una prioridad más alta.SetCurrentValue enables you to change the property’s value without giving it a source with a higher precedence. Del mismo modo, puede usar SetCurrentValue para cambiar el valor de una propiedad sin sobrescribir un enlace.Likewise, you can use SetCurrentValue to change the value of a property without overwriting a binding.

Coerción, animaciones y valor baseCoercion, Animations, and Base Value

Tanto la coerción como la animación actúan sobre un valor al que nos referimos como "valor base" en este SDKSDK.Coercion and animation both act on a value that is termed as the "base value" throughout this SDKSDK. El valor base es, por tanto, cualquier valor que se determine mediante la evaluación ascendente de los elementos hasta alcanzar el elemento 2.The base value is thus whatever value is determined through evaluating upwards in the items until item 2 is reached.

Para una animación, el valor base puede tener un efecto en el valor animado si la animación no especifica los valores "From" y "To" para ciertos comportamientos o si se revierte deliberadamente al valor base al completarse.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. Para verlo en la práctica, ejecute el Ejemplo de valores de destino de animación From, To y By.To see this in practice, run the From, To, and By Animation Target Values Sample. Intente establecer los valores locales del alto del rectángulo del ejemplo, de modo que el valor local inicial difiera de cualquier valor "From" de la animación.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. Observará que las animaciones se inician inmediatamente mediante los valores "From" y reemplazan el valor base una vez iniciadas.You will note that the animations start right away using the "From" values and replace the base value once started. La animación puede especificar para recuperar el valor encontrado antes de la animación una vez completada mediante la especificación de Stop FillBehavior.The animation might specify to return to the value found before animation once it is completed by specifying the Stop FillBehavior. Después, se usa la precedencia normal para la determinación del valor base.Afterwards, normal precedence is used for the base value determination.

Varias animaciones podrían aplicarse a una propiedad única y cada una de estas animaciones se podría haber definido desde diferentes puntos de la precedencia de valores.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. Sin embargo, estas animaciones compondrán potencialmente sus valores, en lugar de aplicar la animación de mayor precedencia simplemente.However, these animations will potentially composite their values, rather than just applying the animation from the higher precedence. Esto depende de la exactitud con la que estén definidas las animaciones y del tipo de valor que se esté animando.This depends on exactly how the animations are defined, and the type of the value that is being animated. Para obtener más información sobre la animación de propiedades, consulte Información general sobre animaciones.For more information about animating properties, see Animation Overview.

La coerción se aplica en el nivel más alto de todos.Coercion applies at the highest level of all. Incluso una animación que ya se está ejecutando está sujeta a la coerción de valores.Even an already running animation is subject to value coercion. Ciertas propiedades de dependencia existentes en WPFWPF tienen la coerción integrada.Certain existing dependency properties in WPFWPF have built-in coercion. Para una propiedad de dependencia personalizada, definir el comportamiento de conversión de una propiedad de dependencia personalizada escribiendo una CoerceValueCallback y pasando la devolución de llamada como parte de metadatos al crear la propiedad.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. También puede invalidar el comportamiento de la coerción de las propiedades existentes mediante la invalidación de los metadatos de esa propiedad en una clase derivada.You can also override coercion behavior of existing properties by overriding the metadata on that property in a derived class. La coerción interactúa con el valor base de forma que se aplican las restricciones en la coerción, ya que esas restricciones existen en el momento, pero el valor base se sigue conservando.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. Por lo tanto, si las restricciones en la coerción se levantan posteriormente, la coerción devolverá el valor más próximo posible a ese valor base y la influencia de la coerción sobre una propiedad cesará potencialmente en cuanto se levanten todas las restricciones.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. Para obtener más información sobre el comportamiento de la coerción, consulte Devoluciones de llamada y validación de las propiedades de dependencia.For more information about coercion behavior, see Dependency Property Callbacks and Validation.

Comportamientos de los desencadenadoresTrigger Behaviors

Los controles suelen definir los comportamientos de los desencadenadores como parte de su estilo predeterminado en los temas.Controls often define trigger behaviors as part of their default style in themes. Establecer las propiedades locales en los controles puede impedir que los desencadenadores sean capaces de responder a eventos controlados por el usuario, ya sea de manera visual o conductual.Setting local properties on controls might prevent the triggers from being able to respond to user-driven events either visually or behaviorally. El uso más común de un desencadenador de propiedad es para las propiedades de control o estado, como IsSelected.The most common use of a property trigger is for control or state properties such as IsSelected. Por ejemplo, de forma predeterminada cuando un Button está deshabilitado (desencadenar para IsEnabled es false) la Foreground valor del estilo de tema es lo que hace que el control aparezca "atenuado".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". Sin embargo, si ha establecido una variable local Foreground valor, que el color gris horizontal normal anulará en la prioridad de conjunto de propiedades local, incluso en este escenario desencadenado por propiedades.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. Tenga precaución al establecer valores de propiedades con comportamientos de desencadenador de nivel de tema y asegúrese de no interferir excesivamente en la experiencia de usuario prevista para este control.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.

Precedencia de los valores y ClearValueClearValue and Value Precedence

El ClearValue método proporciona medios adecuados para borrar cualquier valor aplicado localmente de una propiedad de dependencia que se establece en un elemento.The ClearValue method provides an expedient means to clear any locally applied value from a dependency property that is set on an element. Sin embargo, una llamada a ClearValue no es una garantía de que el valor predeterminado establecido en metadatos durante el registro de la propiedad es el nuevo valor efectivo.However, calling ClearValue is not a guarantee that the default as established in metadata during property registration is the new effective value. Todos los demás participantes en la precedencia de valores siguen estando activos.All of the other participants in value precedence are still active. Solo el valor establecido localmente se quitó de la secuencia de precedencia.Only the locally set value has been removed from the precedence sequence. Por ejemplo, si se llama a ClearValue en una propiedad donde esa propiedad también se establece mediante un estilo de tema y, después, el valor de tema se aplica como el nuevo valor en lugar de con el valor predeterminado basado en metadatos.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 desea tomar a todos los participantes del valor de propiedad fuera del proceso y establezca el valor en el valor predeterminado de los metadatos registrados, puede obtener que el valor predeterminado definitivamente consultando los metadatos de propiedad de dependencia y, a continuación, puede usar el valor predeterminado para localmente Establezca la propiedad con una llamada a 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.

Vea tambiénSee also