Precedência do valor de propriedade da dependênciaDependency Property Value Precedence

Este tópico explica como o funcionamento do sistema de propriedades do Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) pode afetar o valor de uma propriedade de dependência e descreve a precedência pela qual os aspectos do sistema de propriedades são aplicados ao valor efetivo de uma propriedade.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.

PrerequisitesPrerequisites

Este tópico pressupõe que você entenda as propriedades de dependência da perspectiva de um consumidor das propriedades de dependência existentes em classes do WPFWPF e que leu Visão geral das propriedades de dependência.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 os exemplos deste tópico, você também deve ter noções básicas de XAML (linguagem XAML)Extensible Application Markup Language (XAML) e saber como escrever aplicativos do WPFWPF.To follow the examples in this topic, you should also understand XAML (linguagem XAML)Extensible Application Markup Language (XAML) and know how to write WPFWPF applications.

O sistema de propriedades do WPFThe WPF Property System

O sistema de propriedades do WPFWPF oferece uma maneira sofisticada de determinar o valor das propriedades de dependência por uma variedade de fatores, permitindo recursos como validação de propriedade em tempo real, associação tardia e notificação das propriedades relacionadas de alterações nos valores de outras propriedades.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. A ordem exata e a lógica que é usada para determinar os valores das propriedades de dependência são razoavelmente complexas.The exact order and logic that is used to determine dependency property values is reasonably complex. Conhecer essa ordem ajudará você a evitar a configuração desnecessária de propriedades e pode também esclarecer dúvidas sobre o motivo exato pelo qual uma tentativa de influenciar ou antecipar um valor da propriedade de dependência não resultou no 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.

Propriedades de dependência podem ser “definidas” em vários locaisDependency Properties Might Be "Set" in Multiple Places

O exemplo a seguir é XAMLXAML em que a mesma propriedade (Background) tem três operações "set" diferentes que podem influenciar o 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>

Aqui, qual cor você espera que seja aplicada – vermelho, verde ou azul?Here, which color do you expect will apply—red, green, or blue?

Com exceção dos valores animados e da coerção, os conjuntos de propriedades locais são definidos com a precedência mais alta.With the exception of animated values and coercion, local property sets are set at the highest precedence. Se você definir um valor localmente, poderá esperar que ele seja respeitado, até mesmo acima de todos os estilos ou modelos de controle.If you set a value locally you can expect that the value will be honored, even above any styles or control templates. Aqui, no exemplo, Background é definido como vermelho localmente.Here in the example, Background is set to Red locally. Portanto, o estilo definido nesse escopo, mesmo que seja um estilo implícito que, caso contrário, se aplique a todos os elementos desse tipo nesse escopo, não é a precedência mais alta para dar a propriedade Background seu 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. Se você removeu o valor Vermelho local da instância Botão, o estilo terá precedência e o botão obterá o valor Tela de Fundo do 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. No estilo, os gatilhos têm precedência e, portanto, o botão será azul se o mouse estiver sobre ele; caso contrário, será verde.Within the style, triggers take precedence, so the button will be blue if the mouse is over it, and green otherwise.

Lista de precedências de configuração das propriedades de dependênciaDependency Property Setting Precedence List

Veja a seguir a ordem definitiva que o sistema de propriedades usa ao atribuir os valores de tempo de execução das propriedades de dependência.The following is the definitive order that the property system uses when assigning the run-time values of dependency properties. A precedência mais alta é listada primeiro.Highest precedence is listed first. Essa lista se expande em algumas das generalizações feitas na Visão geral das propriedades de dependência.This list expands on some of the generalizations made in the Dependency Properties Overview.

  1. Coerção do sistema de propriedades.Property system coercion. Para obter detalhes sobre coerção, consulte Coerção, animação e valor base mais adiante neste tópico.For details on coercion, see Coercion, Animation, and Base Value later in this topic.

  2. Animações ativas ou animações com um comportamento Em Espera.Active animations, or animations with a Hold behavior. Para obter um efeito prático, uma animação de uma propriedade deve conseguir ter precedência sobre o valor base (não animado), mesmo que esse valor tenha sido definido 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 obter detalhes, consulte Coerção, animação e valor base mais adiante neste tópico.For details, see Coercion, Animation, and Base Value later in this topic.

  3. Valor local.Local value. Um valor local pode ser definido por meio da conveniência da propriedade "wrapper", que também equivale a definir como um elemento de propriedade ou atributo em XAMLXAML, ou por uma chamada para a API de SetValue usando uma propriedade de uma instância 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 API using a property of a specific instance. Se você definir um valor local usando uma associação ou um recurso, cada um deles atuará na precedência como se um valor direto fosse definido.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. Propriedades de modelo TemplatedParent.TemplatedParent template properties. Um elemento tem um TemplatedParent se ele foi criado como parte de um modelo (um ControlTemplate ou DataTemplate).An element has a TemplatedParent if it was created as part of a template (a ControlTemplate or DataTemplate). Para obter detalhes sobre quando isso se aplica, consulte TemplatedParent mais adiante neste tópico.For details on when this applies, see TemplatedParent later in this topic. No modelo, a seguinte precedência se aplica:Within the template, the following precedence applies:

    1. Gatilhos do modelo de TemplatedParent.Triggers from the TemplatedParent template.

    2. Conjuntos de Propriedades (normalmente por meio de atributos de XAMLXAML) no modelo de TemplatedParent.Property sets (typically through XAMLXAML attributes) in the TemplatedParent template.

  5. Estilo implícito.Implicit style. Aplicável somente à propriedade Style.Applies only to the Style property. A propriedade Style é preenchida por qualquer recurso de estilo com uma chave que corresponde ao tipo desse elemento.The Style property is filled by any style resource with a key that matches the type of that element. Esse recurso de estilo deve existir na página ou no aplicativo; a pesquisa de um recurso de estilo implícito não continua nos 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. Gatilhos de estilo.Style triggers. Os gatilhos em estilos da página ou do aplicativo (esses estilos podem ser estilos explícitos ou implícitos, mas não baseados em estilos padrão, que têm precedência mais baixa).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. Gatilhos de modelo.Template triggers. Qualquer gatilho de um modelo em um estilo ou um modelo aplicado diretamente.Any trigger from a template within a style, or a directly applied template.

  8. Setters de estilo.Style setters. Valores de um Setter em estilos de página ou aplicativo.Values from a Setter within styles from page or application.

  9. Estilo (tema) padrão.Default (theme) style. Para obter detalhes sobre quando isso se aplica e como os estilos de tema se relacionam com os modelos nos estilos de tema, consulte Estilos (tema) padrão mais adiante neste tópico.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. Em um estilo padrão, a seguinte ordem de precedência se aplica:Within a default style, the following order of precedence applies:

    1. Gatilhos ativos no estilo de tema.Active triggers in the theme style.

    2. Setters no estilo de tema.Setters in the theme style.

  10. Herança.Inheritance. Algumas propriedades de dependência herdam seus valores do elemento pai para os elementos filho, de modo que elas não precisam ser definidas especificamente em cada elemento em todo o aplicativo.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 obter detalhes, consulte Herança do valor da propriedade.For details see Property Value Inheritance.

  11. Valor padrão dos metadados de propriedades de dependência.Default value from dependency property metadata. Uma propriedade de dependência específica pode ter um valor padrão, conforme estabelecido pelo registro do sistema de propriedades dessa propriedade específica.Any given dependency property may have a default value as established by the property system registration of that particular property. Além disso, as classes derivadas que herdam uma propriedade de dependência têm a opção de substituir esses metadados (incluindo o valor padrão) 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. Consulte Metadados de propriedades de dependência para obter mais informações.See Dependency Property Metadata for more information. Como a herança é verificada antes do valor padrão em uma propriedade herdada, o valor padrão de um elemento pai tem precedência sobre um elemento filho.Because inheritance is checked before default value, for an inherited property, a parent element default value takes precedence over a child element. Consequentemente, se uma propriedade herdável não for definida em nenhum lugar, o valor padrão especificado na raiz ou no pai será usado em vez do valor padrão do elemento filho.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 um item de precedência não se aplica a nenhuma propriedade de um elemento declarado diretamente na marcação de aplicativo padrão.TemplatedParent as a precedence item does not apply to any property of an element that you declare directly in standard application markup. O conceito de TemplatedParent existe somente para itens filho em uma árvore visual que passa a existir por meio da aplicação do modelo.The TemplatedParent concept exists only for child items within a visual tree that come into existence through the application of the template. Quando o sistema de propriedades pesquisa o modelo de TemplatedParent em busca de um valor, ele está pesquisando o modelo que criou esse elemento.When the property system searches the TemplatedParent template for a value, it is searching the template that created that element. Os valores de Propriedade do modelo de TemplatedParent geralmente agem como se fossem definidos como um valor local no elemento filho, mas essa menor precedência versus o valor local existe porque os modelos são potencialmente compartilhados.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 obter detalhes, consulte TemplatedParent.For details, see TemplatedParent.

A propriedade de estiloThe Style Property

A ordem de pesquisa descrita anteriormente se aplica a todas as propriedades de dependência possíveis, exceto uma: a propriedade Style.The order of lookup described earlier applies to all possible dependency properties except one: the Style property. A propriedade Style é exclusiva, pois ela não pode ser estilizada, portanto, os itens de precedência 5 a 8 não se aplicam.The Style property is unique in that it cannot itself be styled, so the precedence items 5 through 8 do not apply. Além disso, a animação ou a coerção de Style não é recomendável (e a animação Style exigiria uma classe de animação personalizada).Also, either animating or coercing Style is not recommended (and animating Style would require a custom animation class). Isso deixa três maneiras que a propriedade Style pode ser definida:This leaves three ways that the Style property might be set:

  • Estilo explícito.Explicit style. A propriedade Style é definida diretamente.The Style property is set directly. Na maioria dos cenários, o estilo não é definido embutido, mas referenciado como um recurso, por chave explícita.In most scenarios, the style is not defined inline, but instead is referenced as a resource, by explicit key. Nesse caso, a própria propriedade Estilo atua como se fosse um valor local, conforme o item de precedência 3.In this case the Style property itself acts as if it were a local value, precedence item 3.

  • Estilo implícito.Implicit style. A propriedade Style não está definida diretamente.The Style property is not set directly. No entanto, o Style existe em algum nível na sequência de pesquisa de recursos (página, aplicativo) e é com chave usando uma chave de recurso que corresponde ao tipo ao qual o estilo deve ser aplicado.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. Nesse caso, a propriedade Style em si age por uma precedência identificada na sequência como item 5.In this case, the Style property itself acts by a precedence identified in the sequence as item 5. Essa condição pode ser detectada usando DependencyPropertyHelper na propriedade Style e procurando ImplicitStyleReference nos resultados.This condition can be detected by using DependencyPropertyHelper against the Style property and looking for ImplicitStyleReference in the results.

  • Estilo padrão, também conhecido como estilo de tema.Default style, also known as theme style. A propriedade Style não é definida diretamente e, na verdade, será lida como null até o tempo de execução.The Style property is not set directly, and in fact will read as null up until run time. Nesse caso, o estilo é obtido da avaliação de tema em tempo de execução que faz parte do mecanismo de apresentação do WPFWPF.In this case, the style comes from the run-time theme evaluation that is part of the WPFWPF presentation engine.

Para estilos implícitos que não estão em temas, o tipo deve corresponder exatamente a MyButton classe derivada de Buttonnão usará implicitamente um 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 (tema) padrãoDefault (Theme) Styles

Cada controle que acompanha o WPFWPF tem um estilo padrão.Every control that ships with WPFWPF has a default style. Potencialmente, esse estilo padrão varia por tema, razão pela qual ele é, às vezes, conhecido como um estilo de tema.That default style potentially varies by theme, which is why this default style is sometimes referred to as a theme style.

As informações mais importantes encontradas em um estilo padrão para um controle são seu modelo de controle, que existe no estilo de tema como um setter para sua propriedade Template.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. Se não houvesse nenhum modelo dos estilos padrão, um controle sem um modelo personalizado como parte de um estilo personalizado não teria nenhuma aparência 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. O modelo do estilo padrão fornece à aparência visual de cada controle uma estrutura básica e também define as conexões entre as propriedades definidas na árvore visual do modelo e a classe de controle correspondente.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 controle expõe um conjunto de propriedades que pode influenciar a aparência visual do controle sem substituir o modelo por completo.Each control exposes a set of properties that can influence the visual appearance of the control without completely replacing the template. Por exemplo, considere a aparência visual padrão de um controle de Thumb, que é um componente de um ScrollBar.For example, consider the default visual appearance of a Thumb control, which is a component of a ScrollBar.

Um Thumb tem determinadas propriedades personalizáveis.A Thumb has certain customizable properties. O modelo padrão de uma Thumb cria uma estrutura básica/árvore visual com vários componentes Border aninhados para criar uma aparência de bisel.The default template of a Thumb creates a basic structure / visual tree with several nested Border components to create a bevel look. Se uma propriedade que faz parte do modelo for destinada a ser exposta para personalização pela classe Thumb, essa propriedade deverá ser exposta por um TemplateBindingdentro do modelo.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. No caso de Thumb, várias propriedades dessas bordas compartilham uma associação de modelo com propriedades como Background ou BorderThickness.In the case of Thumb, various properties of these borders share a template binding to properties such as Background or BorderThickness. Porém, algumas outras propriedades ou disposições visuais são embutidas em código no modelo de controle ou são associadas a valores obtidos diretamente do tema e não podem ser alteradas sem que seja necessário substituir o modelo inteiro.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. Em geral, se uma propriedade é obtida de um pai modelo e não é exposta por uma associação de modelo, ela não pode ser ajustada por estilos, pois não há nenhuma maneira fácil de direcioná-la.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. Porém, essa propriedade ainda poderá ser influenciada pela herança do valor da propriedade no modelo aplicado ou pelo valor padrão.But that property could still be influenced by property value inheritance in the applied template, or by default value.

Os estilos de tema usam um tipo como a chave em suas definições.The theme styles use a type as the key in their definitions. No entanto, quando os temas são aplicados a uma determinada instância de elemento, a pesquisa de temas para esse tipo é realizada verificando a propriedade DefaultStyleKey em um controle.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. Isso é diferente de usar o Tipo literal, como os estilos implícitos usam.This is in contrast to using the literal Type, as implicit styles do. O valor de DefaultStyleKey herdaria para classes derivadas, mesmo se o implementador não o tiver alterado (a maneira desejada de alterar a propriedade não é substituí-la no nível de propriedade, mas, em vez disso, alterar seu valor padrão nos metadados da propriedade).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). Essa indireção permite que as classes base definam os estilos de tema para elementos derivados que, de outro modo, não têm um estilo (ou mais importante, não tem um modelo dentro desse estilo e, portanto, não têm nenhuma aparência visual padrão).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). Assim, você pode derivar MyButton de Button e ainda obterá o modelo de Button padrão.Thus, you can derive MyButton from Button and will still get the Button default template. Se você fosse o autor do controle de MyButton e quisesse um comportamento diferente, poderia substituir os metadados de propriedade de dependência de DefaultStyleKey em MyButton para retornar uma chave diferente e, em seguida, definir os estilos de tema relevantes, incluindo o modelo para MyButton que você deve empacotar com o controle de MyButton.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 obter mais detalhes sobre temas, estilos e criação de controle, consulte Visão geral da criação de controle.For more details on themes, styles, and control authoring, see Control Authoring Overview.

Referências a recursos dinâmicos e associaçãoDynamic Resource References and Binding

Referências a recursos dinâmicos e operações de associação respeitam a precedência da localização na qual estão definidas.Dynamic resource references and binding operations respect the precedence of the location at which they are set. Por exemplo, um recurso dinâmico aplicado a um valor local atua de acordo com o item de precedência 3, uma associação de um setter de propriedade em um estilo de tema é aplicada no item de precedência 9 e assim por diante.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. Como as referências a recursos dinâmicos e a associação devem poder obter valores do estado de tempo de execução do aplicativo, isso implica que o processo real de determinação da precedência do valor da propriedade específica se estende para o tempo de execução também.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.

Estritamente falando, as referências a recursos dinâmicos não fazem parte do sistema de propriedades, mas têm uma própria ordem de pesquisa que interage com a sequência listada acima.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. Essa precedência é documentada mais detalhadamente em Recursos XAML.That precedence is documented more thoroughly in the XAML Resources. O resumo básico dessa precedência é: elemento na raiz da página, aplicativo, tema e sistema.The basic summation of that precedence is: element to page root, application, theme, system.

Os recursos dinâmicos e as associações têm a precedência da localização na qual foram definidas, mas o valor é adiado.Dynamic resources and bindings have the precedence of where they were set, but the value is deferred. Uma consequência disso é que, se você definir um recurso dinâmico ou uma associação com um valor local, uma alteração no valor local substituirá o recurso dinâmico ou a associação por completo.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. Mesmo que você chame o método ClearValue para limpar o valor definido localmente, o recurso dinâmico ou a associação não será restaurada.Even if you call the ClearValue method to clear the locally set value, the dynamic resource or binding will not be restored. Na verdade, se você chamar ClearValue em uma propriedade que tem um recurso dinâmico ou associação em vigor (sem valor local literal), elas serão limpas pela chamada de ClearValue também.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

O método SetCurrentValue é outra maneira de definir uma propriedade, mas não está na ordem de precedência.The SetCurrentValue method is another way to set a property, but it is not in the order of precedence. Em vez disso, SetCurrentValue permite que você altere o valor de uma propriedade sem substituir a origem de um valor anterior.Instead, SetCurrentValue enables you to change the value of a property without overwriting the source of a previous value. Você pode usar SetCurrentValue sempre que desejar definir um valor sem dar a esse valor a precedência de um 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 exemplo, se uma propriedade for definida por um gatilho e, em seguida, atribuída a outro valor por meio de SetCurrentValue, o sistema de propriedades ainda respeitará o gatilho e a propriedade será alterada se a ação do gatilho ocorrer.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 permite que você altere o valor da propriedade sem dar a ela uma fonte com precedência mais alta.SetCurrentValue enables you to change the property’s value without giving it a source with a higher precedence. Da mesma forma, você pode usar SetCurrentValue para alterar o valor de uma propriedade sem substituir uma associação.Likewise, you can use SetCurrentValue to change the value of a property without overwriting a binding.

Coerção, animações e valor baseCoercion, Animations, and Base Value

A coerção e a animação agem em um valor que é chamado de "valor base" em todo esse SDK.Coercion and animation both act on a value that is termed as the "base value" throughout this SDK. O valor base é, portanto, qualquer valor determinado por meio da avaliação ascendente de itens até chegar ao item 2.The base value is thus whatever value is determined through evaluating upwards in the items until item 2 is reached.

Para uma animação, o valor base pode ter um efeito sobre o valor animado, caso essa animação não especifique “De” e “Para” para alguns comportamentos ou caso a animação seja revertida deliberadamente para o valor base quando concluída.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 ver isso na prática, execute a Amostra de valores de destino De, Para e Por da animação.To see this in practice, run the From, To, and By Animation Target Values Sample. Tente definir os valores locais da altura do retângulo no exemplo, para que o valor local inicial seja diferente de qualquer “De” na animação.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. Você observará que as animações são iniciadas imediatamente usando os valores de “De” e substituem o valor base depois de iniciadas.You will note that the animations start right away using the "From" values and replace the base value once started. A animação pode especificar para retornar ao valor encontrado antes da animação quando ela for concluída, especificando o FillBehaviorde interrupção.The animation might specify to return to the value found before animation once it is completed by specifying the Stop FillBehavior. Posteriormente, a precedência normal é usada para a determinação do valor base.Afterwards, normal precedence is used for the base value determination.

Várias animações podem ser aplicadas a uma única propriedade, em que cada uma dessas animações possivelmente foi definida em diferentes pontos na precedência de valor.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. No entanto, potencialmente, essas animações compõem seus valores, em vez de apenas aplicar a animação da precedência mais alta.However, these animations will potentially composite their values, rather than just applying the animation from the higher precedence. Isso depende de como exatamente as animações são definidas e do tipo do valor que está sendo animado.This depends on exactly how the animations are defined, and the type of the value that is being animated. Para obter mais informações sobre propriedades de animação, consulte Visão geral da animação.For more information about animating properties, see Animation Overview.

A coerção é aplicada no nível mais alto de todos.Coercion applies at the highest level of all. Mesmo uma animação já em execução está sujeita à coerção de valor.Even an already running animation is subject to value coercion. Algumas propriedades de dependência existentes no WPFWPF têm coerção interna.Certain existing dependency properties in WPFWPF have built-in coercion. Para uma propriedade de dependência personalizada, você define o comportamento de coerção para uma propriedade de dependência personalizada escrevendo um CoerceValueCallback e passando o retorno de chamada como parte dos metadados quando você cria a propriedade.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. Também é possível substituir o comportamento de coerção das propriedades existentes substituindo os metadados dessa propriedade em uma classe derivada.You can also override coercion behavior of existing properties by overriding the metadata on that property in a derived class. A coerção interage com o valor base de tal forma que as restrições na coerção são aplicadas com as restrições existentes no momento, mas o valor base ainda é retido.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. Portanto, se as restrições na coerção forem retiradas posteriormente, a coerção retornará o valor mais próximo possível do valor base e, potencialmente, a influência de coerção em uma propriedade deixará de existir assim que todas as restrições forem retiradas.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 obter mais informações sobre o comportamento de coerção, consulte Retornos de chamada da propriedade de dependência e validação.For more information about coercion behavior, see Dependency Property Callbacks and Validation.

Comportamentos de gatilhoTrigger Behaviors

Em geral, os controles definem os comportamentos de gatilho como parte de seu estilo padrão em temas.Controls often define trigger behaviors as part of their default style in themes. A configuração de propriedades locais nos controles pode impedir que os gatilhos possam responder a eventos controlados pelo usuário de maneira visual ou comportamental.Setting local properties on controls might prevent the triggers from being able to respond to user-driven events either visually or behaviorally. O uso mais comum de um gatilho de propriedade é para propriedades de controle ou estado, como IsSelected.The most common use of a property trigger is for control or state properties such as IsSelected. Por exemplo, por padrão, quando um Button está desabilitado (o gatilho para IsEnabled é false), o valor de Foreground no estilo de tema é o que faz com que o controle apareça "esmaecido".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". Mas se você tiver definido um valor de Foreground local, essa cor de cinza normal será anulada em precedência pelo conjunto de propriedades local, mesmo nesse cenário disparado por propriedade.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. Seja cuidadoso ao definir valores para propriedades que têm comportamentos de gatilho no nível de tema e garanta que você não está interferindo impropriamente na experiência do usuário pretendida para o controle.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 e precedência de valorClearValue and Value Precedence

O método ClearValue fornece um meio conveniente para limpar qualquer valor aplicado localmente de uma propriedade de dependência que é definida em um elemento.The ClearValue method provides an expedient means to clear any locally applied value from a dependency property that is set on an element. No entanto, chamar ClearValue não é uma garantia de que o padrão conforme estabelecido nos metadados durante o registro da propriedade é o novo valor efetivo.However, calling ClearValue is not a guarantee that the default as established in metadata during property registration is the new effective value. Todos os outros participantes na precedência de valor ainda estão ativos.All of the other participants in value precedence are still active. Somente o valor definido localmente foi removido da sequência de precedência.Only the locally set value has been removed from the precedence sequence. Por exemplo, se você chamar ClearValue em uma propriedade em que essa propriedade também é definida por um estilo de tema, o valor do tema será aplicado como o novo valor em vez do padrão baseado em metadados.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. Se você quiser pegar todos os participantes do valor da Propriedade do processo e definir o valor para o padrão de metadados registrado, poderá obter esse valor padrão de acordo consultando os metadados da propriedade de dependência e, em seguida, poderá usar o valor padrão para definir localmente a propriedade com uma chamada para 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.

Confira tambémSee also