Precedenza del valore della proprietà di dipendenzaDependency Property Value Precedence

Questo argomento illustra il modo in cui i meccanismi del sistema di proprietà Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) possono influire sul valore di una proprietà di dipendenza e descrive la precedenza in base alla quale gli aspetti del sistema di proprietà si applicano al valore effettivo di una proprietà.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

Questo argomento presuppone la conoscenza delle proprietà di dipendenza dal punto di vista di un consumer delle proprietà di dipendenza esistenti nelle classi di WPFWPF, nonché la lettura dell'argomento Panoramica sulle proprietà di dipendenza.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. Per seguire gli esempi illustrati in questo argomento, è anche necessario conoscere Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML) e saper scrivere applicazioni WPFWPF.To follow the examples in this topic, you should also understand Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML) and know how to write WPFWPF applications.

Il sistema di proprietà WPFThe WPF Property System

Il sistema di proprietà WPFWPF offre un potente strumento per consentire la determinazione del valore delle proprietà di dipendenza in base a numerosi fattori, abilitando funzionalità quali la convalida delle proprietà in tempo reale, l'associazione tardiva e la notifica alle proprietà correlate delle modifiche ai valori di altre proprietà.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'ordine e logica precisi usati per determinare i valori delle proprietà di dipendenza sono piuttosto complessi.The exact order and logic that is used to determine dependency property values is reasonably complex. La conoscenza di questo ordine consentirà di evitare l'impostazione dì proprietà non necessarie e potrebbe anche eliminare i dubbi sui motivi precisi per i quali alcuni tentativi di influenzare o anticipare un valore delle proprietà di dipendenza non hanno determinato il valore atteso.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.

Le proprietà di dipendenza possono essere impostate in più puntiDependency Properties Might Be "Set" in Multiple Places

Di seguito è riportato un esempio XAMLXAML in cui la stessa proprietà (Background) presenta tre diverse operazioni "set" che potrebbero influenzare il valore.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>

In questo caso, quale colore ci si aspetta che verrà applicato, rosso, verde o blu?Here, which color do you expect will apply—red, green, or blue?

Ad eccezione dei valori animati e della coercizione, i set di proprietà locali vengono impostati con la precedenza più elevata.With the exception of animated values and coercion, local property sets are set at the highest precedence. Se si imposta localmente un valore, è possibile prevedere che il valore venga accettato, anche al di là degli stili o dei modelli di controllo.If you set a value locally you can expect that the value will be honored, even above any styles or control templates. Nell'esempio Background viene impostato su rosso localmente.Here in the example, Background is set to Red locally. Pertanto, lo stile definito in questo ambito, anche se si tratta di uno stile implicito altrimenti applicabile a tutti gli elementi di quel tipo in tale ambito, non è la precedenza più elevata per fornire il valore della proprietà Background.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 è stato rimosso il valore locale Red dall'istanza specifica del controllo Button, lo stile avrà la precedenza e il pulsante otterrà il valore di Background dallo stile.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. All'interno dello stile, i trigger hanno la precedenza, pertanto il pulsante sarà blu se il mouse è posizionato su di esso e verde in caso contrario.Within the style, triggers take precedence, so the button will be blue if the mouse is over it, and green otherwise.

Elenco delle precedenze per l'impostazione delle proprietà di dipendenzaDependency Property Setting Precedence List

Di seguito viene riportato l'ordine definitivo usato dal sistema di proprietà per l'assegnazione dei valori di runtime delle proprietà di dipendenza.The following is the definitive order that the property system uses when assigning the run-time values of dependency properties. La precedenza più elevata viene elencata per prima.Highest precedence is listed first. Questo elenco si basa su alcuni dei concetti generali espressi in Panoramica sulle proprietà di dipendenza.This list expands on some of the generalizations made in the Dependency Properties Overview.

  1. Coercizione del sistema di proprietà.Property system coercion. Per informazioni dettagliate sulla coercizione, vedere Coercizione, animazione e valore di base più avanti in questo argomento.For details on coercion, see Coercion, Animation, and Base Value later in this topic.

  2. Animazioni attive o animazioni con un comportamento di attesa.Active animations, or animations with a Hold behavior. Per ottenere qualsiasi effetto pratico, l'animazione di una proprietà deve essere in grado di avere la precedenza sul valore di base (inanimato), anche se quel valore è stato impostato 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. Per informazioni dettagliate, vedere Coercizione, animazione e valore di base più avanti in questo argomento.For details, see Coercion, Animation, and Base Value later in this topic.

  3. Valore locale.Local value. Un valore locale può essere impostato tramite la praticità della proprietà "wrapper", che equivale anche a impostare come attributo o elemento proprietà in XAMLXAMLo da una chiamata all'API SetValue utilizzando una proprietà di un'istanza specifica.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 si imposta un valore locale usando un'associazione o una risorsa, ciascuno di questi elementi dispone della precedenza come se fosse stato impostato un valore diretto.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. Proprietà del modello TemplatedParent.TemplatedParent template properties. Un elemento ha un TemplatedParent se è stato creato come parte di un modello (ControlTemplate o DataTemplate).An element has a TemplatedParent if it was created as part of a template (a ControlTemplate or DataTemplate). Per informazioni dettagliate sulle situazioni in cui viene applicato, vedere TemplatedParent più avanti in questo argomento.For details on when this applies, see TemplatedParent later in this topic. All'interno del modello, viene applicata la seguente precedenza:Within the template, the following precedence applies:

    1. Trigger dal modello di TemplatedParent.Triggers from the TemplatedParent template.

    2. Set di proprietà (in genere tramite XAMLXAML attributi) nel modello di TemplatedParent.Property sets (typically through XAMLXAML attributes) in the TemplatedParent template.

  5. Stile implicito.Implicit style. Si applica solo alla proprietà Style.Applies only to the Style property. La proprietà Style viene riempita da qualsiasi risorsa di stile con una chiave che corrisponde al tipo di quell'elemento.The Style property is filled by any style resource with a key that matches the type of that element. Quella risorsa di stile deve essere presente nella pagina o nell'applicazione. La ricerca per una risorsa di stile implicita non viene eseguita nei temi.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. Trigger degli stili.Style triggers. I trigger all'interno di stili da una pagina o un'applicazione (questi stili potrebbero essere stili espliciti o impliciti, ma non derivati dagli stili predefiniti, che hanno una precedenza inferiore).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. Trigger dei modelli.Template triggers. Qualsiasi trigger da un modello all'interno di uno stile oppure un modello applicato direttamente.Any trigger from a template within a style, or a directly applied template.

  8. Setter di stili.Style setters. Valori da un Setter all'interno di stili dalla pagina o dall'applicazione.Values from a Setter within styles from page or application.

  9. Stile (tema) predefinito.Default (theme) style. Per informazioni dettagliate sui casi in cui viene applicato e sul modo in cui gli stili del tema si riferiscono ai modelli all'interno degli stili del tema, vedere Stili (tema) predefiniti più avanti in questo argomento.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. All'interno di uno stile predefinito, viene applicato il seguente ordine di precedenza:Within a default style, the following order of precedence applies:

    1. Trigger attivi nello stile del tema.Active triggers in the theme style.

    2. Setter nello stile del tema.Setters in the theme style.

  10. Ereditarietà.Inheritance. Alcune proprietà di dipendenza ereditano i propri valori dall'elemento padre agli elementi figlio, in modo che non sia necessario impostarli in modo specifico per ogni elemento in tutta l'applicazione.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. Per informazioni dettagliate, vedere Ereditarietà del valore della proprietà.For details see Property Value Inheritance.

  11. Valore predefinito dai metadati delle proprietà di dipendenza.Default value from dependency property metadata. Qualsiasi proprietà di dipendenza specificata può avere un valore predefinito come stabilito dalla registrazione del sistema di proprietà di quella particolare proprietà.Any given dependency property may have a default value as established by the property system registration of that particular property. Inoltre, le classi derivate che ereditano una proprietà di dipendenza hanno la possibilità di eseguire l'override di tali metadati (incluso il valore predefinito) in base al 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. Per altre informazioni, vedere Metadati delle proprietà di dipendenza.See Dependency Property Metadata for more information. Dato che l'ereditarietà viene controllata prima del valore predefinito, per una proprietà ereditata un valore predefinito dell'elemento padre ha la precedenza su un elemento figlio.Because inheritance is checked before default value, for an inherited property, a parent element default value takes precedence over a child element. Di conseguenza, se una proprietà ereditabile non viene impostata ovunque, viene usato il valore predefinito come specificato nella radice o nell'elemento padre invece del valore predefinito dell'elemento figlio.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 come un elemento di precedenza non si applica a qualsiasi proprietà di un elemento che viene dichiarata direttamente nel markup dell'applicazione standard.TemplatedParent as a precedence item does not apply to any property of an element that you declare directly in standard application markup. Il concetto di TemplatedParent esiste solo per elementi figlio all'interno di una struttura ad albero visuale che vengono creati tramite l'applicazione del modello.The TemplatedParent concept exists only for child items within a visual tree that come into existence through the application of the template. Quando il sistema di proprietà Cerca un valore nel modello di TemplatedParent, sta cercando il modello che ha creato tale elemento.When the property system searches the TemplatedParent template for a value, it is searching the template that created that element. I valori delle proprietà del modello di TemplatedParent in genere agiscono come se fossero impostati come valore locale nell'elemento figlio, ma questa precedenza minore rispetto al valore locale esiste perché i modelli sono potenzialmente condivisi.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. Per informazioni dettagliate, vedere TemplatedParent.For details, see TemplatedParent.

Proprietà StyleThe Style Property

L'ordine di ricerca descritto in precedenza si applica a tutte le possibili proprietà di dipendenza tranne una: la proprietà Style.The order of lookup described earlier applies to all possible dependency properties except one: the Style property. La proprietà Style è univoca in quanto non è possibile applicare uno stile, quindi gli elementi di precedenza da 5 a 8 non vengono applicati.The Style property is unique in that it cannot itself be styled, so the precedence items 5 through 8 do not apply. Inoltre, l'animazione o la coercizione di Style non è consigliata (e l'animazione Style richiederebbe una classe di animazione personalizzata).Also, either animating or coercing Style is not recommended (and animating Style would require a custom animation class). In questo modo è possibile impostare la proprietà Style:This leaves three ways that the Style property might be set:

  • Stile esplicito.Explicit style. La proprietà Style è impostata direttamente.The Style property is set directly. Nella maggior parte degli scenari, lo stile non viene definito inline, ma viene invece indicato come una risorsa, tramite una chiave esplicita.In most scenarios, the style is not defined inline, but instead is referenced as a resource, by explicit key. In questo caso la stessa proprietà Style agisce come se fosse un valore locale, elemento di precedenza 3.In this case the Style property itself acts as if it were a local value, precedence item 3.

  • Stile implicito.Implicit style. La proprietà Style non è impostata direttamente.The Style property is not set directly. Tuttavia, il Style esiste a un certo livello nella sequenza di ricerca delle risorse (pagina, applicazione) e viene immesso con una chiave di risorsa corrispondente al tipo a cui deve essere applicato lo stile.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. In questo caso, la proprietà Style stesso agisce con una precedenza identificata nella sequenza come elemento 5.In this case, the Style property itself acts by a precedence identified in the sequence as item 5. Questa condizione può essere rilevata utilizzando DependencyPropertyHelper sulla proprietà Style e cercando ImplicitStyleReference nei risultati.This condition can be detected by using DependencyPropertyHelper against the Style property and looking for ImplicitStyleReference in the results.

  • Stile predefinito, noto anche come stile del tema.Default style, also known as theme style. La proprietà Style non è impostata direttamente e in realtà verrà letta come null fino alla fase di esecuzione.The Style property is not set directly, and in fact will read as null up until run time. In questo caso, lo stile deriva dalla valutazione del tema di runtime che fa parte del motore di presentazione WPFWPF.In this case, the style comes from the run-time theme evaluation that is part of the WPFWPF presentation engine.

Per gli stili impliciti non presenti nei temi, il tipo deve corrispondere esattamente a un MyButton classe derivata da Buttonnon utilizzerà in modo implicito uno stile per 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.

Stili (tema) predefinitiDefault (Theme) Styles

Ogni controllo fornito con WPFWPF dispone di uno stile predefinito.Every control that ships with WPFWPF has a default style. Potenzialmente, lo stile predefinito varia in base al tema, motivo per il quale questo stile predefinito viene indicato in alcuni casi come uno stile del tema.That default style potentially varies by theme, which is why this default style is sometimes referred to as a theme style.

Le informazioni più importanti trovate all'interno di uno stile predefinito per un controllo sono il relativo modello di controllo, che esiste nello stile del tema come Setter per la relativa proprietà 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 non esistesse un modello derivato dagli stili predefiniti, un controllo senza un modello personalizzato come parte di uno stile personalizzato non presenterebbe alcun aspetto visivo.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. Il modello derivato dallo stile predefinito fornisce all'aspetto visivo di ciascun controllo una struttura di base e definisce anche le connessioni tra proprietà definite nella struttura ad albero visuale del modello e la classe di controlli corrispondente.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. Ogni controllo espone un set di proprietà che può influenzare l'aspetto visivo del controllo senza sostituire completamente il modello.Each control exposes a set of properties that can influence the visual appearance of the control without completely replacing the template. Si consideri, ad esempio, l'aspetto visivo predefinito di un controllo Thumb, che è un componente di un ScrollBar.For example, consider the default visual appearance of a Thumb control, which is a component of a ScrollBar.

Una Thumb dispone di determinate proprietà personalizzabili.A Thumb has certain customizable properties. Il modello predefinito di un Thumb crea una struttura di base/struttura ad albero visuale con diversi componenti Border annidati per creare un aspetto smussato.The default template of a Thumb creates a basic structure / visual tree with several nested Border components to create a bevel look. Se una proprietà che fa parte del modello deve essere esposta per la personalizzazione da parte della classe Thumb, tale proprietà deve essere esposta da un oggetto TemplateBinding, all'interno del modello.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. Nel caso di Thumb, diverse proprietà di questi bordi condividono un'associazione di modelli a proprietà quali Background o BorderThickness.In the case of Thumb, various properties of these borders share a template binding to properties such as Background or BorderThickness. Ma certe altre proprietà o disposizioni visive sono hardcoded nel modello di controllo o sono associate a valori che derivano direttamente dal tema e non possono essere modificate senza sostituire l'intero modello.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. Generalmente, se una proprietà deriva da un elemento padre basato su modelli e non viene esposta da un'associazione di modelli, non può essere regolata dagli stili poiché non esiste un modo semplice per fare riferimento ad essa.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. Ma tale proprietà potrebbe essere ancora influenzata dall'ereditarietà dei valori della proprietà nel modello applicato oppure dal valore predefinito.But that property could still be influenced by property value inheritance in the applied template, or by default value.

Gli stili del tema usano un tipo come chiave nelle definizioni.The theme styles use a type as the key in their definitions. Tuttavia, quando i temi vengono applicati a una determinata istanza dell'elemento, la ricerca dei temi per questo tipo viene eseguita controllando la proprietà DefaultStyleKey su un controllo.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. Questa operazione è in contrasto con l'uso del tipo letterale, adottato dagli stili impliciti.This is in contrast to using the literal Type, as implicit styles do. Il valore di DefaultStyleKey erediterà le classi derivate anche se l'implementatore non lo ha modificato (il modo previsto per modificare la proprietà non è eseguirne l'override a livello di proprietà, ma per modificare il valore predefinito nei metadati della proprietà).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). Questo riferimento indiretto consente alle classi di base di definire gli stili del tema per gli elementi derivati che non dispongono di un altro stile oppure, in un caso più importante, che non dispongono di un modello all'interno di quello stile e che di conseguenza non avrebbero alcun aspetto visivo predefinito.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). Pertanto, è possibile derivare MyButton da Button e ottenere comunque il Button modello predefinito.Thus, you can derive MyButton from Button and will still get the Button default template. Se si fosse l'autore del controllo di MyButton e si volesse un comportamento diverso, era possibile eseguire l'override dei metadati della proprietà di dipendenza per DefaultStyleKey su MyButton per restituire una chiave diversa, quindi definire gli stili del tema pertinenti, incluso il modello per MyButton è necessario creare un pacchetto con il controllo 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. Per altri dettagli su temi, stili e creazione di controlli, vedere Cenni preliminari sulla modifica di controlli.For more details on themes, styles, and control authoring, see Control Authoring Overview.

Riferimenti e associazione di risorse dinamicheDynamic Resource References and Binding

I riferimenti alle risorse dinamiche e le operazioni di associazione rispettano la precedenza della posizione su cui sono impostati.Dynamic resource references and binding operations respect the precedence of the location at which they are set. Ad esempio, una risorsa dinamica applicata a un valore locale agisce in base all'elemento di precedenza 3, a un'associazione per un setter di proprietà all'interno di un stile del tema viene applicato un elemento di precedenza 9 e così via.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. Dato che i riferimenti e l'associazione per le risorse dinamiche devono essere in grado di ottenere valori dallo stato della fase di esecuzione dell'applicazione, ciò comporta che anche il processo effettivo di determinazione della precedenza del valore di proprietà per qualsiasi proprietà specificata si estende nella fase di esecuzione.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.

I riferimenti alle risorse dinamiche non fanno parte in senso stretto del sistema di proprietà, ma hanno un proprio ordine di ricerca che interagisce con la sequenza elencata in precedenza.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. Tale precedenza è documentata più approfonditamente in Risorse XAML.That precedence is documented more thoroughly in the XAML Resources. La somma di base di tale precedenza è: elemento alla radice della pagina, applicazione, tema, sistema.The basic summation of that precedence is: element to page root, application, theme, system.

Le risorse dinamiche e le associazioni hanno la precedenza relativamente a dove sono state impostate, ma il valore viene rinviato.Dynamic resources and bindings have the precedence of where they were set, but the value is deferred. Una conseguenza di ciò è che, se si imposta una risorsa dinamica o un'associazione su un valore locale, qualsiasi modifica al valore locale sostituisce completamente la risorsa dinamica o l'associazione.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. Anche se si chiama il metodo ClearValue per cancellare il valore impostato localmente, la risorsa dinamica o l'associazione non verrà ripristinata.Even if you call the ClearValue method to clear the locally set value, the dynamic resource or binding will not be restored. Infatti, se si chiama ClearValue su una proprietà con una risorsa dinamica o un'associazione sul posto (senza valore locale letterale), vengono cancellate anche dalla chiamata ClearValue.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

Il metodo SetCurrentValue è un altro modo per impostare una proprietà, ma non è in ordine di precedenza.The SetCurrentValue method is another way to set a property, but it is not in the order of precedence. SetCurrentValue consente invece di modificare il valore di una proprietà senza sovrascrivere l'origine di un valore precedente.Instead, SetCurrentValue enables you to change the value of a property without overwriting the source of a previous value. È possibile utilizzare SetCurrentValue ogni volta che si desidera impostare un valore senza assegnare tale valore alla precedenza di un valore locale.You can use SetCurrentValue any time that you want to set a value without giving that value the precedence of a local value. Se, ad esempio, una proprietà viene impostata da un trigger e quindi viene assegnato un altro valore tramite SetCurrentValue, il sistema di proprietà rispetta il trigger e la proprietà verrà modificata se si verifica l'azione del trigger.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 consente di modificare il valore della proprietà senza assegnarle un'origine con precedenza maggiore.SetCurrentValue enables you to change the property’s value without giving it a source with a higher precedence. Analogamente, è possibile utilizzare SetCurrentValue per modificare il valore di una proprietà senza sovrascrivere un'associazione.Likewise, you can use SetCurrentValue to change the value of a property without overwriting a binding.

Coercizione, animazioni e valore di baseCoercion, Animations, and Base Value

La coercizione e l'animazione agiscono entrambi su un valore definito come "valore di base" in tutto questo SDK.Coercion and animation both act on a value that is termed as the "base value" throughout this SDK. Di conseguenza, il valore di base è un qualsiasi valore determinato tramite la valutazione verso l'alto negli elementi fino a raggiungere l'elemento 2.The base value is thus whatever value is determined through evaluating upwards in the items until item 2 is reached.

Per un'animazione, il valore di base può avere un effetto sul valore animato, se quell'animazione non specifica le impostazioni "From" e "To" per determinati comportamenti o se l'animazione ripristina intenzionalmente il valore di base quando viene completata.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. Per osservare questo comportamento nella pratica, eseguire l'Esempio valori di destinazione dell'animazione From/To/By.To see this in practice, run the From, To, and By Animation Target Values Sample. Tentare di impostare i valori locali dell'altezza del rettangolo nell'esempio, in modo che il valore locale iniziale sia diverso da qualsiasi impostazione "From" nell'animazione.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. Si noterà che le animazioni iniziano immediatamente usando i valori "From" valori e sostituiscono il valore di base una volta avviate.You will note that the animations start right away using the "From" values and replace the base value once started. L'animazione potrebbe specificare per tornare al valore trovato prima dell'animazione dopo che è stato completato specificando l'FillBehaviorstop.The animation might specify to return to the value found before animation once it is completed by specifying the Stop FillBehavior. In seguito, verrà usata la precedenza normale per la determinazione del valore di base.Afterwards, normal precedence is used for the base value determination.

Possono essere applicate più animazioni a una sola proprietà, ognuna delle quali definita da punti diversi nella precedenza dei valori.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. Tuttavia, queste animazioni comporranno i relativi valori, piuttosto che applicare semplicemente l'animazione dalla precedenza più elevata.However, these animations will potentially composite their values, rather than just applying the animation from the higher precedence. Ciò dipende dal modo preciso in cui sono definite le animazioni e dal tipo del valore che viene animato.This depends on exactly how the animations are defined, and the type of the value that is being animated. Per altre informazioni sulle proprietà di animazione vedere Cenni preliminari sull'animazione.For more information about animating properties, see Animation Overview.

La coercizione si applica al livello più elevato in assoluto.Coercion applies at the highest level of all. Anche un'animazione già in esecuzione è soggetta alla coercizione del valore.Even an already running animation is subject to value coercion. Alcune proprietà di dipendenza esistenti in WPFWPF dispongono di una coercizione incorporata.Certain existing dependency properties in WPFWPF have built-in coercion. Per una proprietà di dipendenza personalizzata, si definisce il comportamento di coercizione per una proprietà di dipendenza personalizzata scrivendo un CoerceValueCallback e passando il callback come parte dei metadati quando si crea la proprietà.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. È anche possibile eseguire l'override del comportamento di coercizione di proprietà esistenti eseguendo l'override dei metadati di quella proprietà in una classe derivata.You can also override coercion behavior of existing properties by overriding the metadata on that property in a derived class. La coercizione interagisce con il valore di base in modo tale che i vincoli di coercizione vengano applicati come i vincoli esistenti in quel momento, mantenendo tuttavia il valore di base.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. Pertanto, se i vincoli nella coercizione vengono rimossi in un secondo momento, la coercizione restituirà il valore più vicino possibile a quel valore di base e l'influenza della coercizione su una proprietà cesserà potenzialmente appena vengono rimossi tutti i vincoli.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. Per altre informazioni sul comportamento di coercizione, vedere Callback e convalida delle proprietà di dipendenza.For more information about coercion behavior, see Dependency Property Callbacks and Validation.

Comportamenti dei triggerTrigger Behaviors

I controlli spesso definiscono i comportamenti dei trigger come parte dello stile predefinito nei temi.Controls often define trigger behaviors as part of their default style in themes. L'impostazione di proprietà locali sui controlli può impedire ai trigger di essere in grado di rispondere agli eventi generati dagli utenti sia da un punto di vista visivo sia da un punto di vista di comportamento.Setting local properties on controls might prevent the triggers from being able to respond to user-driven events either visually or behaviorally. L'uso più comune di un trigger di proprietà è per le proprietà di controllo o di stato, ad esempio IsSelected.The most common use of a property trigger is for control or state properties such as IsSelected. Per impostazione predefinita, ad esempio, quando un Button è disabilitato (il trigger per IsEnabled è false), il valore di Foreground nello stile del tema è quello che fa sì che il controllo venga visualizzato in grigio.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". Tuttavia, se è stato impostato un valore di Foreground locale, il normale colore grigio viene sovraregolato in base alla priorità del set di proprietà locali, anche in questo scenario attivato dalla proprietà.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. Prestare attenzione nell'impostazione di valori per proprietà che presentano comportamenti di trigger a livello di tema e accertarsi di non interferire impropriamente con l'esperienza utente prevista per quel controllo.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 precedenza dei valoriClearValue and Value Precedence

Il metodo ClearValue fornisce un espediente per cancellare qualsiasi valore applicato localmente da una proprietà di dipendenza impostata su 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. Tuttavia, la chiamata di ClearValue non garantisce che l'impostazione predefinita, come stabilito nei metadati durante la registrazione della proprietà, sia il nuovo valore effettivo.However, calling ClearValue is not a guarantee that the default as established in metadata during property registration is the new effective value. Tutti gli altri partecipanti nella precedenza dei valori sono ancora attivi.All of the other participants in value precedence are still active. Solo il valore impostato localmente è stato rimosso dalla sequenza di precedenza.Only the locally set value has been removed from the precedence sequence. Se ad esempio si chiama ClearValue su una proprietà in cui tale proprietà viene impostata anche da uno stile del tema, il valore del tema viene applicato come nuovo valore anziché come predefinito basato sui metadati.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 si desidera che tutti i partecipanti del valore della proprietà vengano esclusi dal processo e il valore venga impostato sull'impostazione predefinita dei metadati registrati, è possibile ottenere tale valore predefinito in modo definitivo eseguendo una query sui metadati della proprietà di dipendenza, quindi è possibile utilizzare il valore predefinito per localmente impostare la proprietà con una chiamata 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.

Vedere ancheSee also