依存関係プロパティ値の優先順位Dependency Property Value Precedence

このトピックでは、Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) プロパティ システムの動作が依存関係プロパティの値に与える影響と、システムのさまざまな部分がプロパティの有効な値に適用する優先順位について説明します。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.

必要条件Prerequisites

このトピックは、WPFWPF クラスの既存の依存関係プロパティのコンシューマーの観点から依存関係プロパティを理解しており、「依存関係プロパティの概要」を読んでいることを前提としています。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. このトピックの例について理解するには、Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML) および 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.

WPF プロパティ システムThe WPF Property System

WPFWPF プロパティ システムは、依存関係プロパティの値をさまざまな要因によって決定し、リアルタイム プロパティの検証や遅延バインディングなどの機能を有効にし、他のプロパティの値の変更を関連プロパティに通知する、強力な手段を提供します。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. 依存関係プロパティの値の決定に使われる正確な順序とロジックはかなり複雑です。The exact order and logic that is used to determine dependency property values is reasonably complex. この順序を知っておくと、不要なプロパティの設定を避けることができ、依存関係プロパティの値を設定または予測しようとしても期待通りにならない正確な理由についての混乱も解決される可能性があります。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.

依存関係プロパティは複数の場所で "設定" される可能性があるDependency Properties Might Be "Set" in Multiple Places

次に示すのは、同じプロパティ (Background) に、値に影響を与える可能性のある3つの異なる "set" 操作がある XAMLXAML の例です。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>

さて、赤、緑、青のどの色になるでしょうか。Here, which color do you expect will apply—red, green, or blue?

アニメーション化された値および強制型変換の場合を除き、ローカル プロパティ セットは最高の優先順位で設定されます。With the exception of animated values and coercion, local property sets are set at the highest precedence. ローカルに値を設定する場合は、スタイルまたはコントロール テンプレートであっても、その値が採用されるものと期待できます。If you set a value locally you can expect that the value will be honored, even above any styles or control templates. この例では、Background はローカルに Red に設定されています。Here in the example, Background is set to Red locally. したがって、このスコープで定義されているスタイルは、そのスコープ内のその型のすべての要素に適用される暗黙的なスタイルであっても、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. Button インスタンスからローカル値の Red を削除すると、スタイルが優先されるようになり、ボタンの Background の値はスタイルから取得されます。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. スタイル内ではトリガーが優先されるので、ボタンはマウスでポイントすると青になり、それ以外の場合は緑になります。Within the style, triggers take precedence, so the button will be blue if the mouse is over it, and green otherwise.

依存関係プロパティの設定の優先順位一覧Dependency Property Setting Precedence List

次に示すのは、依存関係プロパティの実行時の値を割り当てるときにプロパティ システムが使う明確な順序です。The following is the definitive order that the property system uses when assigning the run-time values of dependency properties. 優先順位が高いものから順に示されています。Highest precedence is listed first. この一覧では、「依存関係プロパティの概要」で一般化されていたものを拡張してあります。This list expands on some of the generalizations made in the Dependency Properties Overview.

  1. プロパティ システムの強制型変換。Property system coercion. 強制型変換について詳しくは、後の「強制型変換、アニメーション、基本値」をご覧ください。For details on coercion, see Coercion, Animation, and Base Value later in this topic.

  2. アクティブなアニメーション、または保留動作のアニメーション。Active animations, or animations with a Hold behavior. 実際的な効果を得るためには、プロパティのアニメーションは、基本 (アニメーション化されていない) 値 (ローカルに設定された値であっても) より高い優先順位を持つことができる必要があります。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. 詳しくは、後の「強制型変換、アニメーション、基本値」をご覧ください。For details, see Coercion, Animation, and Base Value later in this topic.

  3. ローカル値。Local value. ローカル値は、"ラッパー" プロパティを使用して設定できます。これは、XAMLXAMLで属性またはプロパティ要素として設定したり、特定のインスタンスのプロパティを使用して SetValue API を呼び出したりすることにも相当します。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. バインドまたはリソースを使ってローカル値を設定する場合、これらは直接値が設定された場合のように優先されます。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 テンプレート プロパティ。TemplatedParent template properties. 要素には、テンプレートの一部として作成された場合 (ControlTemplate または DataTemplate)、TemplatedParent があります。An element has a TemplatedParent if it was created as part of a template (a ControlTemplate or DataTemplate). これが適用されるケースについて詳しくは、後の「TemplatedParent」をご覧ください。For details on when this applies, see TemplatedParent later in this topic. テンプレート内では、次の優先順位が適用されます。Within the template, the following precedence applies:

    1. TemplatedParent テンプレートからのトリガー。Triggers from the TemplatedParent template.

    2. TemplatedParent テンプレートのプロパティセット (通常は XAMLXAML 属性)。Property sets (typically through XAMLXAML attributes) in the TemplatedParent template.

  5. 暗黙的スタイル。Implicit style. Style プロパティのみに適用されます。Applies only to the Style property. Style プロパティは、その要素の型と一致するキーを持つスタイル リソースによって設定されます。The Style property is filled by any style resource with a key that matches the type of that element. そのスタイル リソースは、ページまたはアプリケーション内に存在する必要があります。暗黙的スタイル リソースの参照はテーマまでは及びません。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. スタイルのトリガー。Style triggers. ページまたはアプリケーションに含まれるスタイル内のトリガー (これらのスタイルは、明示的スタイルまたは暗黙的スタイルどちらの場合もありますが、優先順位の低い既定スタイルではありません)。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. テンプレートのトリガー。Template triggers. スタイル内のテンプレートまたは直接適用されたテンプレートからのトリガーです。Any trigger from a template within a style, or a directly applied template.

  8. スタイルのセッター。Style setters. ページまたはアプリケーションのスタイル内の Setter の値。Values from a Setter within styles from page or application.

  9. 既定 (テーマ) のスタイル。Default (theme) style. これが適用される場合、およびテーマ スタイルとテーマ スタイル内のテンプレートの関係について詳しくは、後の「既定 (テーマ) のスタイル」をご覧ください。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. 既定のスタイル内では、次の優先順位が適用されます。Within a default style, the following order of precedence applies:

    1. テーマ スタイル内のアクティブなトリガー。Active triggers in the theme style.

    2. テーマ スタイル内のセッター。Setters in the theme style.

  10. 継承。Inheritance. いくつかの依存関係プロパティは親要素から子要素に値を継承するので、アプリケーション全体で各要素に値を明示的に設定する必要はありません。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. 詳しくは、「プロパティ値の継承」をご覧ください。For details see Property Value Inheritance.

  11. 依存関係プロパティのメタデータの既定値。Default value from dependency property metadata. どの依存関係プロパティも、その特定のプロパティがプロパティ システムに登録されるときに設定される既定値を持つことができます。Any given dependency property may have a default value as established by the property system registration of that particular property. また、依存関係プロパティを継承する派生クラスには、型ごとにそのメタデータ (既定値を含む) をオーバーライドするオプションがあります。Also, derived classes that inherit a dependency property have the option to override that metadata (including the default value) on a per-type basis. 詳しくは、「依存関係プロパティのメタデータ」をご覧ください。See Dependency Property Metadata for more information. 継承は既定値の前にチェックされるため、継承されるプロパティの場合、親要素の既定値の方が子要素より優先されます。Because inheritance is checked before default value, for an inherited property, a parent element default value takes precedence over a child element. その結果、継承可能なプロパティがどこでも設定されていない場合は、ルートまたは親で指定されている既定値が、子要素の既定値の代わりに使われます。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 は、標準アプリケーション マークアップで直接宣言された要素のプロパティには適用されません。TemplatedParent as a precedence item does not apply to any property of an element that you declare directly in standard application markup. TemplatedParent の概念は、テンプレートの適用によって作成されるビジュアル ツリー内の子項目に対してのみ存在します。The TemplatedParent concept exists only for child items within a visual tree that come into existence through the application of the template. プロパティシステムが TemplatedParent テンプレート内で値を検索すると、その要素を作成したテンプレートが検索されます。When the property system searches the TemplatedParent template for a value, it is searching the template that created that element. TemplatedParent テンプレートのプロパティ値は、通常、子要素のローカル値として設定されているかのように機能しますが、テンプレートは共有される可能性があるため、この優先順位はローカル値とは異なります。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. 詳細については、「TemplatedParent」を参照してください。For details, see TemplatedParent.

スタイル プロパティThe Style Property

前に説明した検索の順序は、使用可能なすべての依存関係プロパティ (Style プロパティ) に適用されます。The order of lookup described earlier applies to all possible dependency properties except one: the Style property. Style プロパティは、それ自体をスタイル設定できないので一意であるため、優先順位の項目 5 ~ 8 は適用されません。The Style property is unique in that it cannot itself be styled, so the precedence items 5 through 8 do not apply. また、アニメーション化または強制型変換 Style は推奨されません (Style アニメーション化するには、カスタムアニメーションクラスが必要です)。Also, either animating or coercing Style is not recommended (and animating Style would require a custom animation class). これにより、Style プロパティが設定される3つの方法があります。This leaves three ways that the Style property might be set:

  • 明示的スタイル。Explicit style. Style プロパティは直接設定されます。The Style property is set directly. ほとんどの場合、スタイルはインラインでは定義されず、代わりにリソースとして明示的なキーにより参照されます。In most scenarios, the style is not defined inline, but instead is referenced as a resource, by explicit key. この場合、スタイル プロパティ自体は、ローカル値と同じように扱われます (優先順位の項目 3)。In this case the Style property itself acts as if it were a local value, precedence item 3.

  • 暗黙的スタイル。Implicit style. Style プロパティが直接設定されていません。The Style property is not set directly. ただし、Style はリソース参照シーケンス (ページ、アプリケーション) の一部のレベルに存在し、スタイルが適用される型と一致するリソースキーを使用してキーが付けられます。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. この場合、Style プロパティ自体は、シーケンス内で項目5として指定された優先順位によって動作します。In this case, the Style property itself acts by a precedence identified in the sequence as item 5. この条件は、Style プロパティに対して DependencyPropertyHelper を使用し、結果の ImplicitStyleReference を検索することによって検出できます。This condition can be detected by using DependencyPropertyHelper against the Style property and looking for ImplicitStyleReference in the results.

  • 既定のスタイル (別称テーマ スタイル)。Default style, also known as theme style. Style プロパティは直接設定されず、実際には実行時まで null として読み取られます。The Style property is not set directly, and in fact will read as null up until run time. この場合、スタイルは、WPFWPF プレゼンテーション エンジンの一部である実行時テーマ評価によって決定されます。In this case, the style comes from the run-time theme evaluation that is part of the WPFWPF presentation engine.

テーマに含まれていない暗黙のスタイルの場合、型は厳密に一致している必要があります MyButton Button派生クラスは 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.

既定 (テーマ) のスタイルDefault (Theme) Styles

WPFWPF に付属するすべてのコントロールには、既定のスタイルがあります。Every control that ships with WPFWPF has a default style. 既定のスタイルはテーマによって異なる場合があり、そのため、この既定のスタイルはテーマのスタイルとも呼ばれます。That default style potentially varies by theme, which is why this default style is sometimes referred to as a theme style.

コントロールの既定のスタイルに含まれる最も重要な情報は、コントロールテンプレートです。これは、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. 既定のスタイルにテンプレートがない場合、カスタム スタイルの一部としてカスタム テンプレートがないコントロールは、まったく表示されません。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. 既定のスタイルのテンプレートは、各コントロールの外観に基本的な構造を提供し、テンプレートのビジュアル ツリーで定義されているプロパティと、対応するコントロール クラスの間の接続を定義します。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. 各コントロールでは、テンプレートを完全に置き換えることなくコントロールの外観に影響を与えることができる、一連のプロパティが公開されています。Each control exposes a set of properties that can influence the visual appearance of the control without completely replacing the template. たとえば、ScrollBarのコンポーネントである Thumb コントロールの既定の外観を考えてみます。For example, consider the default visual appearance of a Thumb control, which is a component of a ScrollBar.

Thumb には、カスタマイズ可能な特定のプロパティがあります。A Thumb has certain customizable properties. Thumb の既定のテンプレートでは、いくつかの入れ子になった Border コンポーネントがある基本構造体/ビジュアルツリーを作成して、ベベルの外観を作成します。The default template of a Thumb creates a basic structure / visual tree with several nested Border components to create a bevel look. テンプレートの一部であるプロパティが Thumb クラスによるカスタマイズのために公開されるように設定されている場合、そのプロパティは、テンプレート内でTemplateBindingによって公開される必要があります。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. Thumbの場合は、これらの境界のさまざまなプロパティが BackgroundBorderThicknessなどのプロパティにテンプレートバインドを共有します。In the case of Thumb, various properties of these borders share a template binding to properties such as Background or BorderThickness. しかし、他の特定のプロパティや視覚的な配置は、コントロール テンプレートにハードコードされているか、またはテーマから直接取得される値にバインドされており、テンプレート全体を置き換えない限り変更できません。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. 一般に、プロパティがテンプレート化された親から取得され、テンプレートのバインドによって公開されない場合は、それをターゲットにする簡単な方法がないため、そのプロパティをスタイルによって調整することはできません。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. ただし、適用されるテンプレートのプロパティ値継承または既定値によって、そのプロパティに影響を与えることはできます。But that property could still be influenced by property value inheritance in the applied template, or by default value.

テーマのスタイルでは、定義のキーとして型を使います。The theme styles use a type as the key in their definitions. ただし、特定の要素インスタンスにテーマを適用すると、コントロールの DefaultStyleKey プロパティをチェックすることによって、この型のテーマの検索が実行されます。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. これは、暗黙的スタイルで行われるリテラル型の使用とは対照的です。This is in contrast to using the literal Type, as implicit styles do. DefaultStyleKey の値は、実装側によって変更されていない場合でも派生クラスに継承されます (プロパティを変更する場合は、プロパティレベルでオーバーライドするのではなく、プロパティメタデータの既定値を変更することをお勧めします)。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). この間接参照により、基底クラスは、他の方法ではスタイルを持たない派生要素に対してテーマのスタイルを定義できます (または、さらに重要なのは、スタイル内にテンプレートを持たず、既定の外観がないということです)。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). したがって、Button から MyButton を派生させることができ、Button の既定のテンプレートが引き続き取得されます。Thus, you can derive MyButton from Button and will still get the Button default template. MyButton のコントロールの作成者であり、別の動作が必要な場合は、MyButton 上の DefaultStyleKey の依存関係プロパティのメタデータをオーバーライドして別のキーを返し、次に MyButton のテンプレートを含む、関連するテーマスタイルを定義します。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. テーマ、スタイル、コントロールの作成について詳しくは、「コントロールの作成の概要」をご覧ください。For more details on themes, styles, and control authoring, see Control Authoring Overview.

動的リソース参照とバインドDynamic Resource References and Binding

動的リソース参照とバインド操作には、それらが設定される場所での優先順位が適用されます。Dynamic resource references and binding operations respect the precedence of the location at which they are set. たとえば、ローカル値に適用される動的リソースは優先順位の項目 3 に準拠し、テーマ スタイル内のプロパティ セッターに対するバインドには優先順位の項目 9 が適用されます。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. 動的リソース参照とバインドはどちらもアプリケーションの実行時状態から値を取得できる必要があるので、特定のプロパティに対するプロパティ値の優先順位を決定する実際のプロセスは、実行時まで拡張されます。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.

厳密に言うと、動的リソース参照はプロパティ システムの一部ではありませんが、上で示したシーケンスに対応する独自の参照順序を持ちます。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. その優先順位について詳しくは、「XAML リソース」をご覧ください。That precedence is documented more thoroughly in the XAML Resources. 基本的な優先順位をまとめると、ページ ルートの要素、アプリケーション、テーマ、システムになります。The basic summation of that precedence is: element to page root, application, theme, system.

動的リソースとバインドには設定された場所での優先順位がありますが、値は遅延されます。Dynamic resources and bindings have the precedence of where they were set, but the value is deferred. その 1 つの帰結として、ローカル値に動的リソースまたはバインドを設定した場合、ローカル値を変更すると動的リソースまたはバインドが完全に置き換えられます。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. ClearValue メソッドを呼び出してローカルに設定された値をクリアした場合でも、動的リソースまたはバインドは復元されません。Even if you call the ClearValue method to clear the locally set value, the dynamic resource or binding will not be restored. 実際には、動的リソースまたはバインドがある (リテラルローカル値がない) プロパティで ClearValue を呼び出すと、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

SetCurrentValue メソッドは、プロパティを設定するもう1つの方法ですが、優先順位ではありません。The SetCurrentValue method is another way to set a property, but it is not in the order of precedence. 代わりに、SetCurrentValue では、以前の値のソースを上書きすることなく、プロパティの値を変更できます。Instead, SetCurrentValue enables you to change the value of a property without overwriting the source of a previous value. 値をローカル値の優先順位に設定せずに値を設定する場合はいつでも SetCurrentValue を使用できます。You can use SetCurrentValue any time that you want to set a value without giving that value the precedence of a local value. たとえば、プロパティがトリガーによって設定され、SetCurrentValueによって別の値が割り当てられた場合でも、プロパティシステムはトリガーを尊重し、トリガーのアクションが発生するとプロパティが変更されます。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 を使用すると、優先順位の高いソースを指定せずに、プロパティの値を変更できます。SetCurrentValue enables you to change the property’s value without giving it a source with a higher precedence. 同様に、SetCurrentValue を使用して、バインディングを上書きせずにプロパティの値を変更することもできます。Likewise, you can use SetCurrentValue to change the value of a property without overwriting a binding.

強制型変換、アニメーション、基本値Coercion, Animations, and Base Value

強制型変換とアニメーションは、この SDK 全体で "ベース値" と呼ばれる値に対して動作します。Coercion and animation both act on a value that is termed as the "base value" throughout this SDK. したがって、基本値とは、項目 2 に達するまで項目をさかのぼって評価されることにより決定される値です。The base value is thus whatever value is determined through evaluating upwards in the items until item 2 is reached.

アニメーションの場合、アニメーションで特定の動作に対して "From" と "To" の両方が指定されていない場合、またはアニメーションが完了すると基本値に意図的に戻る場合は、基本値を使ってアニメーション化される値に影響を及ぼすことができます。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. 実際にどうなるのかを見るには、「From, To, and By Animation Target Values Sample」(アニメーション ターゲット値 From、To、By のサンプル) をご覧ください。To see this in practice, run the From, To, and By Animation Target Values Sample. この例で、四角形の高さのローカル値を、初期ローカル値がアニメーションの "From" と異なるように設定してみます。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. アニメーションが "From" の値を使ってすぐに開始し、開始すると基本値を置き換えることがわかります。You will note that the animations start right away using the "From" values and replace the base value once started. アニメーションは、停止 FillBehaviorを指定することによって完了した後、アニメーションの前に見つかった値に戻るように指定できます。The animation might specify to return to the value found before animation once it is completed by specifying the Stop FillBehavior. その後は、通常の優先順位が基本値の決定に使用されます。Afterwards, normal precedence is used for the base value determination.

1 つのプロパティに複数のアニメーションが適用され、各アニメーションが値の優先順位の異なるポイントから定義されている場合があります。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. ただし、これらのアニメーションは、優先順位の高いアニメーションから単純に適用されるのではなく、値が合成される可能性があります。However, these animations will potentially composite their values, rather than just applying the animation from the higher precedence. これは、アニメーションの定義方法と、アニメーション化される値の型に依存します。This depends on exactly how the animations are defined, and the type of the value that is being animated. プロパティのアニメーション化の詳細については、「アニメーションの概要」を参照してください。For more information about animating properties, see Animation Overview.

強制型変換は、すべての最高レベルで適用されます。Coercion applies at the highest level of all. 既に実行されているアニメーションであっても値の強制型変換が適用されます。Even an already running animation is subject to value coercion. WPFWPF の特定の既存の依存関係プロパティには、組み込みの強制型変換があります。Certain existing dependency properties in WPFWPF have built-in coercion. カスタム依存関係プロパティの場合は、CoerceValueCallback を記述し、プロパティを作成するときにメタデータの一部としてコールバックを渡すことによって、カスタム依存関係プロパティの強制型変換の動作を定義します。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. 派生クラスでプロパティのメタデータをオーバーライドすることにより、既存のプロパティの強制型変換の動作をオーバーライドすることもできます。You can also override coercion behavior of existing properties by overriding the metadata on that property in a derived class. 強制型変換と基本値の相互作用は、その時点で強制型変換に対する制約が存在するものとして適用されるように行われますが、基本値はそれでも保持されます。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. したがって、強制型変換の制約が後で無効になった場合、強制型変換はその基本値に可能な最も近い値を返し、プロパティに対する強制型変換の影響はすべての制約が無効になるとすぐに終了する可能性があります。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. 強制型変換の動作について詳しくは、「依存関係プロパティのコールバックと検証」をご覧ください。For more information about coercion behavior, see Dependency Property Callbacks and Validation.

トリガー動作Trigger Behaviors

コントロールでは、テーマの既定のスタイルの一部としてトリガー動作が定義されていることがよくあります。Controls often define trigger behaviors as part of their default style in themes. コントロールにローカル プロパティを設定すると、ユーザー駆動のイベントに対してトリガーが視覚的または動作的に応答できなくなる可能性があります。Setting local properties on controls might prevent the triggers from being able to respond to user-driven events either visually or behaviorally. プロパティトリガーの最も一般的な用途は、コントロールまたは状態プロパティ (IsSelectedなど) です。The most common use of a property trigger is for control or state properties such as IsSelected. たとえば、既定では Button が無効になっている場合 (IsEnabled のトリガーが false)、テーマスタイルの Foreground 値によって、コントロールが "淡色表示されます" と表示されます。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". ただし、ローカルの Foreground 値を設定した場合、このプロパティによってトリガーされるシナリオであっても、却下の通常の灰色の色はローカルのプロパティセットによって優先されます。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. テーマ レベルのトリガー動作があるプロパティの値を設定するときは注意し、そのコントロールの目的のユーザー エクスペリエンスに過度に干渉していないことを確認する必要があります。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 と値の優先順位ClearValue and Value Precedence

ClearValue メソッドは、要素に設定されている依存関係プロパティからローカルに適用された値をクリアするための便利な手段を提供します。The ClearValue method provides an expedient means to clear any locally applied value from a dependency property that is set on an element. ただし、ClearValue を呼び出すと、プロパティの登録時にメタデータに設定された既定値が新しい有効値になるという保証はありません。However, calling ClearValue is not a guarantee that the default as established in metadata during property registration is the new effective value. 値の優先順位に関係する他のすべての要因はアクティブなままです。All of the other participants in value precedence are still active. ローカルで設定された値が優先順位のシーケンスから削除されるだけです。Only the locally set value has been removed from the precedence sequence. たとえば、プロパティがテーマスタイルによっても設定されているプロパティで ClearValue を呼び出すと、テーマの値が、メタデータベースの既定値ではなく、新しい値として適用されます。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. すべてのプロパティ値の参加者をプロセスから除外し、その値を登録済みメタデータの既定値に設定する場合は、依存関係プロパティのメタデータに対してクエリを実行することで既定値を取得できます。その後、既定値をローカルに使用できます。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.

関連項目See also