Priorität von AbhängigkeitseigenschaftswertenDependency Property Value Precedence

In diesem Thema wird erläutert, wie die Funktionsweise des Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)-Eigenschaftensystems den Wert einer Abhängigkeitseigenschaft beeinflussen kann. Außerdem wird die Rangfolge beschrieben, nach der Aspekte des Eigenschaftensystems auf den effektiven Wert einer Eigenschaft angewendet werden.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.

Erforderliche KomponentenPrerequisites

In diesem Thema wird davon ausgegangen, dass Sie Abhängigkeitseigenschaften aus Sicht eines Consumers vorhandener Abhängigkeitseigenschaften von WPFWPF-Klassen verstehen und die Übersicht über Abhängigkeitseigenschaften gelesen haben.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. Um den Beispielen in diesem Thema zu folgen, sollten Sie zudem Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML) verstehen und wissen, wie WPFWPF-Anwendungen geschrieben werden.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.

Das WPF-EigenschaftensystemThe WPF Property System

Das WPFWPF-Eigenschaftensystem bietet eine leistungsstarke Möglichkeit, den Wert von Abhängigkeitseigenschaften durch eine Vielzahl von Faktoren zu bestimmen, wobei Funktionen wie die Validierung von Eigenschaften in Echtzeit, die späte Bindung und das Benachrichtigen von verknüpften Eigenschaften über Änderungen an Werten für andere Eigenschaften aktiviert werden.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. Die genaue Reihenfolge und Logik, die zur Bestimmung der Werte von Abhängigkeitseigenschaften verwendet werden, ist relativ komplex.The exact order and logic that is used to determine dependency property values is reasonably complex. Indem Sie diese Reihenfolge kennen, können Sie unnötige Eigenschafteneinstellungen vermeiden und klären, wieso genau ein Versuch zur Beeinflussung oder zum Vorhersehen eines Werts einer Abhängigkeitseigenschaft nicht zum erwarteten Wert geführt hat.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.

Abhängigkeitseigenschaften können an mehreren Orten festgelegt („Set“) werdenDependency Properties Might Be "Set" in Multiple Places

Im folgenden finden Sie Beispiel XAMLXAML , in denen die gleiche Eigenschaft (Background) verfügt über drei verschiedene "set" Vorgänge, die den Wert auswirken könnten.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>

Was erwarten Sie, welche Farbe hier angewendet wird – rot, grün oder blau?Here, which color do you expect will apply—red, green, or blue?

Mit Ausnahme von animierten Werten und Koersion werden lokale Eigenschaftensätze mit der höchsten Priorität festgelegt.With the exception of animated values and coercion, local property sets are set at the highest precedence. Wenn Sie einen Wert lokal festlegen, können Sie erwarten, dass der Wert selbst vor Stilen oder Steuerelementvorlagen berücksichtigt wird.If you set a value locally you can expect that the value will be honored, even above any styles or control templates. In diesem Beispiel, Background lokal auf Rot festgelegt wird.Here in the example, Background is set to Red locally. Daher ist das Format, die in diesem Bereich definiert werden, obwohl es ein impliziter Stil ist, die andernfalls für alle Elemente dieses Typs in diesem Bereich gelten würde nicht die höchste Priorität bei der Vergabe der Background Eigenschaft den Wert.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. Wenn Sie den lokalen Wert „Red“ von dieser Schaltflächeninstanz entfernt hätten, hätte der Stil Vorrang, und die Schaltfläche würde den „Background“-Wert vom Stil erhalten.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. Innerhalb des Stils haben Trigger Vorrang, sodass die Schaltfläche blau sein wird, wenn die Maus darauf zeigt, und andernfalls grün.Within the style, triggers take precedence, so the button will be blue if the mouse is over it, and green otherwise.

Rangfolgeliste bei der Einstellung von AbhängigkeitseigenschaftenDependency Property Setting Precedence List

Im Folgenden finden Sie die definitive Reihenfolge, die vom Eigenschaftensystem beim Zuweisen der Laufzeitwerte von Abhängigkeitseigenschaften verwendet wird.The following is the definitive order that the property system uses when assigning the run-time values of dependency properties. Die oberste Priorität ist zuerst aufgeführt.Highest precedence is listed first. Diese Liste erweitert einige der Verallgemeinerungen aus der Übersicht über Abhängigkeitseigenschaften.This list expands on some of the generalizations made in the Dependency Properties Overview.

  1. Eigenschaftensystemkoersion.Property system coercion. Weitere Informationen zur Koersion finden Sie unter Koersion, Animationen und Basiswert weiter unten in diesem Thema.For details on coercion, see Coercion, Animation, and Base Value later in this topic.

  2. Aktive Animationen oder Animationen mit einem Halteverhalten.Active animations, or animations with a Hold behavior. Damit eine Animation einer Eigenschaft eine praktische Auswirkung hat, muss sie Vorrang vor dem (nicht animierten) Basiswert haben können, selbst wenn dieser Wert lokal festgelegt wurde.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. Weitere Informationen finden Sie unter Koersion, Animationen und Basiswert weiter unten in diesem Thema.For details, see Coercion, Animation, and Base Value later in this topic.

  3. Lokaler Wert.Local value. Ein lokaler Wert festgelegt werden kann, über die Vorteile der Eigenschaft "Wrapper", was auch Einstellung als ein Attribut oder Eigenschaftenelement in entspricht XAMLXAML, oder durch einen Aufruf der SetValue API über eine Eigenschaft einer bestimmten Instanz.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. Wenn Sie einen lokalen Wert mithilfe einer Bindung oder eine Ressource festlegen, haben diese jeweils Vorrang, als ob ein direkter Wert festgelegt wurde.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. TemplatedParent-Vorlageneigenschaften.TemplatedParent template properties. Ein Element verfügt über eine TemplatedParent , wenn es als Teil einer Vorlage erstellt wurde (eine ControlTemplate oder DataTemplate).An element has a TemplatedParent if it was created as part of a template (a ControlTemplate or DataTemplate). Weitere Informationen dazu, wann dies zutrifft, finden Sie unter TemplatedParent weiter unten in diesem Thema.For details on when this applies, see TemplatedParent later in this topic. Innerhalb der Vorlage gilt die folgende Rangfolge:Within the template, the following precedence applies:

    1. Wird ausgelöst, von der TemplatedParent Vorlage.Triggers from the TemplatedParent template.

    2. Eigenschaftensätze (normalerweise über XAMLXAML Attribute) in der TemplatedParent Vorlage.Property sets (typically through XAMLXAML attributes) in the TemplatedParent template.

  5. Impliziter Stil.Implicit style. Gilt nur für die Style-Eigenschaft.Applies only to the Style property. Die Style-Eigenschaft wird durch eine Stilressource mit einem Schlüssel gefüllt, der mit dem Typ dieses Elements übereinstimmt.The Style property is filled by any style resource with a key that matches the type of that element. Diese Stilressource muss entweder auf der Seite oder in der Anwendung vorhanden sein. Die Suche nach einer impliziten Stilressource wird nicht in den Designs fortgesetzt.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. Stiltrigger.Style triggers. Die Trigger innerhalb von Stilen einer Seite oder Anwendung (bei diesen Stilen kann es sich entweder um explizite oder um implizite Stile, jedoch nicht um Standardstile handeln, die in der Rangfolge weiter unten stehen).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. Vorlagentrigger.Template triggers. Ein Trigger aus einer Vorlage innerhalb eines Stils oder eine direkt angewendete Vorlage.Any trigger from a template within a style, or a directly applied template.

  8. Stil-Setter.Style setters. Werte aus einer Setter innerhalb von Stilen einer Seite oder Anwendung.Values from a Setter within styles from page or application.

  9. Standard(design)stil.Default (theme) style. Ausführliche Informationen dazu, wann dies zutrifft und wie sich Designstile auf die Vorlagen innerhalb von Designstilen beziehen, finden Sie unter Standard(design)stile weiter unten in diesem Thema.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. Innerhalb eines Standardstils gilt die folgende Rangfolge:Within a default style, the following order of precedence applies:

    1. Aktive Trigger im DesignstilActive triggers in the theme style.

    2. Setter im DesignstilSetters in the theme style.

  10. Vererbung.Inheritance. Einige Abhängigkeitseigenschaften vererben ihre Werte von übergeordneten Elementen an untergeordnete Elemente, sodass sie nicht speziell für jedes Element in einer Anwendung festgelegt werden müssen.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. Weitere Informationen finden Sie unter Vererbung von Eigenschaftswerten.For details see Property Value Inheritance.

  11. Standardwert von den Metadaten der Abhängigkeitseigenschaft.Default value from dependency property metadata. Jede Abhängigkeitseigenschaft kann einen Standardwert haben, wie bei der Registrierung der bestimmten Eigenschaft durch das Eigenschaftensystem festgelegt.Any given dependency property may have a default value as established by the property system registration of that particular property. Außerdem verfügen abgeleitete Klassen, die eine Abhängigkeitseigenschaft erben, über die Option zum Überschreiben dieser Metadaten (einschließlich des Standardwerts) auf einer Pro-Typ-Basis.Also, derived classes that inherit a dependency property have the option to override that metadata (including the default value) on a per-type basis. Weitere Informationen finden Sie unter Metadaten für Abhängigkeitseigenschaften.See Dependency Property Metadata for more information. Da die Vererbung vor dem Standardwert überprüft wird, hat bei einer vererbten Eigenschaft der Standardwert eines übergeordneten Elements Vorrang vor einem untergeordneten Element.Because inheritance is checked before default value, for an inherited property, a parent element default value takes precedence over a child element. Daher wird, wenn eine vererbbare Eigenschaft nicht irgendwo festgelegt ist, der Standardwert verwendet, der im Stamm oder übergeordneten Element festgelegt wurde, anstatt des Standardwerts des untergeordneten Elements.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 als Rangfolgenelement gilt für keine Eigenschaft eines Elements, das Sie direkt in Standardanwendungsmarkup deklarieren.TemplatedParent as a precedence item does not apply to any property of an element that you declare directly in standard application markup. Das TemplatedParent-Konzept besteht nur für untergeordnete Elemente in einer visuellen Struktur, die durch die Anwendung der Vorlage erstellt werden.The TemplatedParent concept exists only for child items within a visual tree that come into existence through the application of the template. Wenn das Eigenschaftensystem sucht die TemplatedParent -Vorlage für einen Wert, sucht er die Vorlage, die das Element erstellt.When the property system searches the TemplatedParent template for a value, it is searching the template that created that element. Die Eigenschaftswerte aus der TemplatedParent Vorlage im allgemeinen Verhalten, als wären Sie als einen lokalen Wert auf dem untergeordneten Element festgelegt wurden, aber diese geringere Priorität gegenüber den lokalen Wert vorhanden ist, da die Vorlagen potenziell geteilt werden.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. Ausführliche Informationen finden Sie unter TemplatedParent.For details, see TemplatedParent.

Die Style-EigenschaftThe Style Property

Die zuvor beschriebene gilt für alle möglichen Abhängigkeitseigenschaften, außer einer: die Style Eigenschaft.The order of lookup described earlier applies to all possible dependency properties except one: the Style property. Die Style Eigenschaft ist eindeutig, da es sich selbst gestaltet werden kann, damit die rangfolgenelemente 5 bis 8 nicht relevant sind.The Style property is unique in that it cannot itself be styled, so the precedence items 5 through 8 do not apply. Darüber hinaus entweder Animation noch die Koersion Style wird nicht empfohlen (und Animieren von Style würde eine benutzerdefinierte Animationsklasse erfordern).Also, either animating or coercing Style is not recommended (and animating Style would require a custom animation class). Dies bewirkt, dass drei Möglichkeiten, die die Style Eigenschaft kann festgelegt werden:This leaves three ways that the Style property might be set:

  • Expliziter Stil.Explicit style. Die Style -Eigenschaft direkt festgelegt.The Style property is set directly. In den meisten Szenarios wird der Stil nicht inline definiert, aber stattdessen durch einen expliziten Schlüssel als eine Ressource verwiesen.In most scenarios, the style is not defined inline, but instead is referenced as a resource, by explicit key. In diesem Fall verhält sich die Style-Eigenschaft selbst so, als handele es sich um einen lokalen Wert, das Rangfolgenelement 3.In this case the Style property itself acts as if it were a local value, precedence item 3.

  • Impliziter Stil.Implicit style. Die Style Eigenschaft wird nicht direkt festgelegt werden.The Style property is not set directly. Allerdings die Style auf einer bestimmten Ebene in der Ressourcensuchsequenz (Seite, Anwendung) ist vorhanden und wird ein Schlüssel mithilfe von ein Ressourcenschlüssel, der dem Typ übereinstimmt, das Format ist auf angewendet werden.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 diesem Fall die Style -Eigenschaft selbst fungiert, in der Sequenz als Element 5 identifizierte Priorität.In this case, the Style property itself acts by a precedence identified in the sequence as item 5. Diese Bedingung kann erkannt werden, mithilfe von DependencyPropertyHelper für die Style -Eigenschaft und nach ImplicitStyleReference in den Ergebnissen.This condition can be detected by using DependencyPropertyHelper against the Style property and looking for ImplicitStyleReference in the results.

  • Standardstil, auch bekannt als Designstil.Default style, also known as theme style. Die Style Eigenschaft wird nicht direkt festgelegt, und in der Tat wird als null bis zur Laufzeit.The Style property is not set directly, and in fact will read as null up until run time. In diesem Fall stammt der Stil von der Auswertung des Laufzeitdesigns, die Teil der WPFWPF-Präsentations-Engine ist.In this case, the style comes from the run-time theme evaluation that is part of the WPFWPF presentation engine.

Bei impliziten Stilen außerhalb von Designs muss der Typ genau - übereinstimmen eine MyButton Button-abgeleiteten Klasse verwendet nicht implizit einen Stil für 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.

Standard(design)stileDefault (Theme) Styles

Jedes Steuerelement, das WPFWPF umfasst, verfügt über einen Standardstil.Every control that ships with WPFWPF has a default style. Der Standardstil variiert möglicherweise nach Design, weshalb dieser Standardstil manchmal auch als Designstil bezeichnet wird.That default style potentially varies by theme, which is why this default style is sometimes referred to as a theme style.

Die wichtigsten Informationen, die innerhalb eines Standardstils gefunden wird, für ein Steuerelement, dessen Steuerelementvorlage, ist die im Designstil als Setter für vorhanden ist die Template Eigenschaft.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. Wenn keine Vorlage von Standardstilen vorhanden wäre, hätte ein Steuerelement ohne eine benutzerdefinierte Vorlage als Teil eines benutzerdefinierten Stils überhaupt keine visuelle Darstellung.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. Die Vorlage des Standardstils gibt der visuellen Darstellung jedes Steuerelements eine grundlegende Struktur und definiert zudem die Verbindungen zwischen Eigenschaften, die in der visuellen Struktur der Vorlage und der entsprechenden Steuerelementklasse definiert werden.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. Jedes Steuerelement macht einen Satz von Eigenschaften verfügbar, die die visuelle Darstellung des Steuerelements beeinflussen können, ohne die Vorlage komplett zu ersetzen.Each control exposes a set of properties that can influence the visual appearance of the control without completely replacing the template. Betrachten Sie beispielsweise die Standardeinstellung für die visuelle Darstellung des eine Thumb -Steuerelement, das eine Komponente ist von einem ScrollBar.For example, consider the default visual appearance of a Thumb control, which is a component of a ScrollBar.

Ein Thumb verfügt über bestimmte anpassbare Eigenschaften.A Thumb has certain customizable properties. Die Standardvorlage eine Thumb erstellt eine grundlegende Struktur / visuelle Struktur mit mehreren geschachtelten Border Komponenten zum Erstellen eines.The default template of a Thumb creates a basic structure / visual tree with several nested Border components to create a bevel look. Wenn eine Eigenschaft, die Teil der Vorlage ist für die Anpassung von verfügbar gemacht werden soll die Thumb Klasse, und klicken Sie dann die Eigenschaft durch verfügbar gemacht werden muss eine TemplateBinding, in der Vorlage.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. Im Fall von Thumb, verschiedene Eigenschaften dieser Rahmen eine vorlagenbindung zu Eigenschaften wie z. B. Freigeben von Background oder BorderThickness.In the case of Thumb, various properties of these borders share a template binding to properties such as Background or BorderThickness. Bestimmte andere Eigenschaften oder visuelle Anordnungen sind in der Steuerelementvorlage hartcodiert oder an Werte gebunden, die direkt aus diesem Design stammen. Diese können nicht ersetzt werden, ohne die gesamte Vorlage zu ersetzen.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. Im Allgemeinen gilt, dass eine Eigenschaft, die von einem vorlagenbasierten übergeordneten Element stammt und nicht von einer Vorlagenbindung verfügbar gemacht wird, nicht durch Stile angepasst werden kann, da nicht auf einfache Weise auf sie abgezielt werden kann.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. Diese Eigenschaft kann jedoch trotzdem durch die Eigenschaftswertvererbung in der angewandten Vorlage oder durch den Standardwert beeinflusst werden.But that property could still be influenced by property value inheritance in the applied template, or by default value.

Die Designstile verwenden einen Typ als Schlüssel in ihren Definitionen.The theme styles use a type as the key in their definitions. Wenn jedoch Designs auf eine bestimmte Elementinstanz angewendet werden, Designsuche für diesen Typ wird ausgeführt durch Überprüfen der DefaultStyleKey Eigenschaft eines Steuerelements.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. Dies steht im Gegensatz zur Verwendung des Literaltyps, wie es bei impliziten Stilen der Fall ist.This is in contrast to using the literal Type, as implicit styles do. Der Wert des DefaultStyleKey würde auf die abgeleitete Klassen erben, auch wenn die Implementierung es nicht geändert haben (die vorgesehene Weise ändern der Eigenschaft ist nicht für die sie auf der Eigenschaftenebene überschreiben, sondern auf ihren Standardwert in Eigenschaftsmetadaten ändern).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). Diese Dereferenzierung ermöglicht Basisklassen, die Designstile für abgeleitete Elemente zu definieren, die andernfalls über keinen Stil verfügen (oder noch wichtiger: die über keine Vorlage innerhalb dieses Stils verfügen und somit überhaupt keine visuelle Standarddarstellung haben würden).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). Sie können daher ableiten MyButton aus Button und erhalten trotzdem die Button Standardvorlage.Thus, you can derive MyButton from Button and will still get the Button default template. Würden Sie den Autor des Steuerelements der MyButton und ein anderes Verhalten gewünscht, können Sie die Metadaten für die Eigenschaft überschreiben DefaultStyleKey auf MyButton auf einen anderen Schlüssel zurückzugeben, und definieren Sie dann die entsprechenden Designstile, einschließlich einer Vorlage für MyButton , die Sie mit Packen müssen Ihre MyButton Steuerelement.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. Weitere Informationen über Designs, Stile und das Erstellen von Steuerelementen finden Sie unter Übersicht über das Erstellen von Steuerelementen.For more details on themes, styles, and control authoring, see Control Authoring Overview.

Dynamische Ressourcenverweise und BindenDynamic Resource References and Binding

Dynamische Ressourcenverweise und Bindungsvorgänge berücksichtigen die Rangfolge des Speicherorts, an dem sie festgelegt werden.Dynamic resource references and binding operations respect the precedence of the location at which they are set. Beispielsweise fungiert eine dynamische Ressource, die auf einen lokalen Wert angewendet wird, als Rangfolgenelement 3, eine Bindung für einen Eigenschaften-Setter innerhalb eines Designstils gilt als Rangfolgenelement 9 usw.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. Da sowohl dynamische Ressourcenreferenzen als auch das Binden Werte aus dem Laufzeitzustand der Anwendung abrufen können muss, hat dies zur Folge, dass der eigentliche Prozess der Bestimmung der Eigenschaftswert-Rangfolge für eine bestimmte Eigenschaft ebenfalls auf die Laufzeit ausgeweitet wird.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.

Dynamische Ressourcenverweise sind streng genommen nicht Teil des Eigenschaftensystems, sie verfügen jedoch über eine eigene Suchreihenfolge, die mit der oben aufgeführten Sequenz interagiert.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. Diese Rangfolge ist in den XAML-Ressourcen genauer dokumentiert.That precedence is documented more thoroughly in the XAML Resources. Die grundlegende Zusammenfassung dieser Rangfolge ist: Element zu Seitenstamm, Anwendung, Design, System.The basic summation of that precedence is: element to page root, application, theme, system.

Dynamische Ressourcen und Bindungen verwenden die Rangfolge von wo sie festgelegt wurden, der Wert ist jedoch zurückgestellt.Dynamic resources and bindings have the precedence of where they were set, but the value is deferred. Eine Folge dessen ist, dass wenn Sie eine dynamische Ressource oder Bindung für einen lokalen Wert festlegen, jede Änderung am lokalen Wert die dynamische Ressource oder Bindung vollständig ersetzt.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. Auch wenn Sie Aufrufen der ClearValue Methode zum Löschen der lokal festgelegten Wert, der dynamische Ressource oder Bindung nicht wiederhergestellt.Even if you call the ClearValue method to clear the locally set value, the dynamic resource or binding will not be restored. In der Tat, wenn Sie aufrufen ClearValue auf eine Eigenschaft, die eine dynamische Ressource oder Bindung (ohne literalen lokalen Wert) verfügt, sie werden gelöscht, indem die ClearValue zu aufrufen.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

Die SetCurrentValue Methode ist eine weitere Möglichkeit, eine Eigenschaft festzulegen, aber es ist nicht in der Rangfolge.The SetCurrentValue method is another way to set a property, but it is not in the order of precedence. Stattdessen SetCurrentValue ermöglicht es Ihnen, den Wert einer Eigenschaft zu ändern, ohne die Quelle eines vorherigen Werts zu überschreiben.Instead, SetCurrentValue enables you to change the value of a property without overwriting the source of a previous value. Sie können SetCurrentValue jedes Mal, die Sie einen Wert ohne diesem Wert die Rangfolge einen lokalen Wert festlegen möchten.You can use SetCurrentValue any time that you want to set a value without giving that value the precedence of a local value. Angenommen, eine Eigenschaft durch einen Trigger festgelegt ist, und klicken Sie dann einen anderen Wert über zugewiesen SetCurrentValue, das Eigenschaftensystem trotzdem berücksichtigt des Triggers und die Eigenschaft wird geändert, wenn die Aktion des Triggers auftritt.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 ermöglicht es Ihnen, den Wert der Eigenschaft zu ändern, ohne ihr eine Quelle mit einer höheren Priorität.SetCurrentValue enables you to change the property’s value without giving it a source with a higher precedence. Ebenso können Sie SetCurrentValue , den Wert einer Eigenschaft zu ändern, ohne eine Bindung zu überschreiben.Likewise, you can use SetCurrentValue to change the value of a property without overwriting a binding.

Koersion, Animationen und BasiswertCoercion, Animations, and Base Value

Sowohl Koersion als auch Animation wirken auf einen Wert, der in diesem SDKSDK als „Basiswert“ bezeichnet wird.Coercion and animation both act on a value that is termed as the "base value" throughout this SDKSDK. Der Basiswert ist daher der Wert, der dadurch bestimmt wird, dass in den Elementen von unten nach oben geprüft wird, bis das Element 2 erreicht wird.The base value is thus whatever value is determined through evaluating upwards in the items until item 2 is reached.

Bei einer Animation kann sich der Basiswert auf den animierten Wert auswirken, wenn diese Animation nicht sowohl „From“ (Von) als auch „To“ (Zu) für bestimmte Verhalten angibt, oder wenn die Animation nach Abschluss bewusst auf den Basiswert zurücksetzt.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. Um dies in der Praxis nachzuvollziehen, führen Sie das Beispiel für From-, To- und By-Animationszielwerte aus.To see this in practice, run the From, To, and By Animation Target Values Sample. Versuchen Sie, die lokalen Werte für die Höhe des Rechtecks im Beispiel so festzulegen, dass sich der ursprüngliche lokale Wert von jedem „From“-Wert in der Animation unterscheidet.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. Sie werden feststellen, dass die Animationen sofort starten, die „From“-Werte verwenden und den Basiswert ersetzen.You will note that the animations start right away using the "From" values and replace the base value once started. Die Animation könnte angeben, um zurück auf den Wert vor der Animation gefunden wird, sobald er abgeschlossen ist, durch Angabe der Unterbrechungspunkt FillBehavior.The animation might specify to return to the value found before animation once it is completed by specifying the Stop FillBehavior. Anschließend wird die normale Rangfolge für die Bestimmung des Basiswerts verwendet.Afterwards, normal precedence is used for the base value determination.

Möglicherweise werden mehrere Animationen auf eine einzelne Eigenschaft angewendet, wobei jede dieser Animationen von verschiedenen Punkten in der Wertrangfolge definiert sein kann.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. Jedoch setzen diese Animationen möglicherweise ihre Werte zusammen, anstatt nur die Animation der höheren Priorität anzuwenden.However, these animations will potentially composite their values, rather than just applying the animation from the higher precedence. Dies hängt davon ab, wie die Animationen genau definiert sind, sowie vom Typ des Werts, der animiert wird.This depends on exactly how the animations are defined, and the type of the value that is being animated. Weitere Informationen zum Animieren von Eigenschaften finden Sie unter Übersicht über Animationen.For more information about animating properties, see Animation Overview.

Die Koersion gilt auf der höchsten Ebene von allen.Coercion applies at the highest level of all. Selbst eine bereits ausgeführte Animation unterliegt der Koersion des Werts.Even an already running animation is subject to value coercion. Bestimmte vorhandene Abhängigkeitseigenschaften in WPFWPF verfügen über eine integrierte Koersion.Certain existing dependency properties in WPFWPF have built-in coercion. Für eine benutzerdefinierte Abhängigkeitseigenschaft können Sie das Koersionsverhalten für eine benutzerdefinierte Abhängigkeitseigenschaft definieren, indem Sie das Schreiben einer CoerceValueCallback und den Rückruf als Teil der Metadaten übergeben, wenn Sie die Eigenschaft zu erstellen.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. Sie können das Koersionsverhalten vorhandener Eigenschaften auch überschreiben, indem Sie die Metadaten dieser Eigenschaft in einer abgeleiteten Klasse überschreiben.You can also override coercion behavior of existing properties by overriding the metadata on that property in a derived class. Die Koersion interagiert so mit dem Basiswert, dass die zum diesem Zeitpunkt vorliegenden Einschränkungen der Koersion angewendet werden, der Basiswert jedoch trotzdem erhalten bleibt.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. Wenn Einschränkungen der Koersion später angehoben werden, gibt die Koersion daher den Wert zurück, der diesem Basiswert am nächsten liegt, und der Einfluss der Koersion auf eine Eigenschaft wird möglicherweise gestoppt, sobald alle Einschränkungen angehoben wurden.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. Weitere Informationen zum Koersionsverhalten finden Sie unter Rückrufe und Validierung von Abhängigkeitseigenschaften.For more information about coercion behavior, see Dependency Property Callbacks and Validation.

TriggerverhaltenTrigger Behaviors

Steuerelemente definieren Triggerverhalten häufig als Teil ihres Standardstils in Designs.Controls often define trigger behaviors as part of their default style in themes. Durch das Festlegen von lokalen Eigenschaften für Steuerelemente wird möglicherweise verhindert, dass die Trigger entweder über die Darstellung oder das Verhalten auf benutzergesteuerte Ereignisse reagieren können.Setting local properties on controls might prevent the triggers from being able to respond to user-driven events either visually or behaviorally. Die häufigste Verwendung von einem Eigenschaftsauslöser ist für Steuerelement- oder Zustandseigenschaften wie IsSelected.The most common use of a property trigger is for control or state properties such as IsSelected. Beispielsweise standardmäßig bei der ein Button ist deaktiviert (auslösen für IsEnabled ist false) und dann die Foreground Wert im Designstil ist, was bewirkt, dass das Steuerelement "ausgegraut" angezeigt.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". Aber wenn Sie eine lokale festgelegt haben Foreground Wert, der, dass normale Farbe in der Rangfolge durch Ihre lokal festgelegte Eigenschaft, auch in dieser Eigenschaft ausgelösten Szenario überschrieben wird.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. Seien Sie vorsichtig mit dem Festlegen von Werten für Eigenschaften, die über Triggerverhalten auf Designebene verfügen, und stellen Sie sicher, dass Sie nicht in die vorgesehene Benutzerfreundlichkeit dieses Steuerelements eingreifen.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 und WertrangfolgeClearValue and Value Precedence

Die ClearValue Methode bietet ein sinnvolles Mittel zum von lokal angewendeten Werten einer Abhängigkeitseigenschaft zu löschen, die für ein Element festgelegt ist.The ClearValue method provides an expedient means to clear any locally applied value from a dependency property that is set on an element. Das Aufrufen von jedoch ClearValue ist keine Garantie, dass die Standardeinstellung, wie in den Metadaten eingerichtet, bei der Registrierung der den neuen gültigen Wert ist.However, calling ClearValue is not a guarantee that the default as established in metadata during property registration is the new effective value. Alle anderen Teilnehmer der Wertrangfolge sind noch immer aktiv.All of the other participants in value precedence are still active. Nur der lokal festgelegte Wert wurde von der Rangfolgensequenz entfernt.Only the locally set value has been removed from the precedence sequence. Wenn Sie aufrufen, z. B. ClearValue für eine Eigenschaft, in dem diese Eigenschaft auch durch einen Designstil festgelegt ist, wird der Designwert wird als der neue Wert statt auf die Standardwerte angewendet.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. Wenn Sie alle von eigenschaftswerteteilnehmer aus dem Prozess nehmen und den Wert in den registrierten Metadatenstandard festlegen möchten, erhalten Sie, dass Standardwert definitiv durch Abfragen der Metadaten für Abhängigkeitseigenschaften, und klicken Sie dann Sie den Standardwert, der lokal verwendet werden kann Legen Sie die Eigenschaft mit einem Aufruf von 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.

Siehe auchSee also