종속성 속성 값 우선 순위Dependency Property Value Precedence

이 항목에서는 WPF(Windows Presentation Foundation)Windows Presentation Foundation (WPF) 속성 시스템의 작업 방식이 종속성 속성 값에 영향을 주는 방식을 설명하고 속성 시스템의 일면이 속성의 유효 값이 적용되는 우선 순위에 관해 설명합니다.This topic explains how the workings of the WPF(Windows Presentation Foundation)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. 이 항목의 예제를 따르려면 XAML(Extensible Application Markup Language)Extensible Application Markup Language (XAML)을 이해하고 WPFWPF 애플리케이션을 작성하는 방법도 알아야 합니다.To follow the examples in this topic, you should also understand XAML(Extensible Application Markup Language)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

다음은 동일한 XAMLXAML 속성()Background값에 영향을 미칠 수 있는 세 가지 다른 "set" 작업이 있는 예제입니다.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 로컬로 빨간색으로 설정됩니다.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. 그 단추 인스턴스에서 로컬 값 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. 요소에는 템플릿(a)의 TemplatedParent ControlTemplate DataTemplate일부로 만들어진 경우가 있습니다.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. 템플릿에서 트리거됩니다. TemplatedParentTriggers from the TemplatedParent template.

    2. 템플릿의 속성 XAMLXAML 집합(일반적으로 속성 TemplatedParent 을 통해).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. 스타일 setter.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. 테마 스타일의 setter.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 속성을 설정할 수 있는 세 가지 방법이 남습니다.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. 이 조건은 DependencyPropertyHelper Style 속성에 대해 사용하고 결과에서 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 속성에 대한 setter로 테마 스타일에 있는 컨트롤 템플릿입니다.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. 예를 Thumb ScrollBar들어, 컨트롤의 구성 요소인 컨트롤의 기본 시각적 모양을 고려합니다.For example, consider the default visual appearance of a Thumb control, which is a component of a ScrollBar.

A에는 Thumb 특정 사용자 지정 가능한 속성이 있습니다.A Thumb has certain customizable properties. a의 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다양한 속성의 경우 Background 또는 와 BorderThickness같은 속성에 바인딩되는 템플릿을 공유합니다.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. 암시적 스타일과 같이 리터럴 Type을 사용하는 방법과는 대조적입니다.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). 따라서 기본 MyButton 템플릿에서 Button 파생될 수 Button 있으며 여전히 기본 템플릿을 얻을 수 있습니다.Thus, you can derive MyButton from Button and will still get the Button default template. 컨트롤 MyButton 작성자이고 DefaultStyleKey 다른 동작을 원할 경우 on을 MyButton 위해 종속성 속성 메타데이터를 재정의하여 다른 키를 반환한 다음 MyButton 컨트롤과 함께 패키징해야 하는 템플릿을 포함한 관련 테마 스타일을 정의할 수 있습니다. MyButtonIf 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에 따라 작동하고, 테마 스타일에 있는 속성 setter의 바인딩은 우선 순위 항목 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. 그 때문에 생기는 결과 중 하나는 동적 리소스나 바인딩을 로컬 값에 설정하라 경우 로컬 값의 변화가 동적 리소스나 바인딩을 완전히 대체한다는 것입니다.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 속성을 설정하는 또 다른 방법이지만 우선 순위에 속하지 는 않습니다.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 및 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. 애니메이션은 Stop 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.

여러 애니메이션을 단일 속성에 적용할 수 있으며, 이러한 애니메이션 각각은 값 우선 순위의 여러 지점에서 정의할 수 있습니다.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 a가 비활성화되면(에 대한 IsEnabled Foreground false트리거) 테마 스타일의 값이 컨트롤이 "회색으로 표시"되는 원인이 됩니다.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