종속성 속성 개요

이 주제에서는 UI의 XAML 정의와 함께 C++, C# 또는 Visual Basic을 사용하여 Windows 런타임 앱을 작성할 때 사용할 수 있는 종속성 속성 시스템에 대해 설명합니다.

종속성 속성이란?

종속성 속성은 특수한 유형의 속성입니다. 특히 속성 값이 추적되고 Windows 런타임 일부인 전용 속성 시스템의 영향을 받는 속성입니다.

종속성 속성을 지원하려면 속성을 정의하는 개체가 DependencyObject여야 합니다(즉, 상속의 어딘가에 DependencyObject 기본 클래스가 있는 클래스). XAML을 사용한 UWP 앱의 UI 정의에 사용하는 유형 중 상당수는 DependencyObject 하위 클래스이며 종속성 속성을 지원합니다. 그러나 이름에 "XAML"이 없는 Windows 런타임 네임스페이스에서 오는 모든 형식은 종속성 속성을 지원하지 않습니다. 이러한 형식의 속성은 속성 시스템의 종속성 동작이 없는 일반 속성입니다.

종속성 속성의 목적은 다른 입력(실행되는 동안 앱 내에서 발생하는 다른 속성, 이벤트 및 상태)을 기반으로 속성 값을 계산하는 체계적인 방법을 제공하는 것입니다. 이러한 다른 입력에는 다음이 포함될 수 있습니다.

  • 사용자 기본 설정과 같은 외부 입력
  • 데이터 바인딩 및 애니메이션이나 스토리보드와 같은 Just-In-Time 속성 결정 메커니즘.
  • 리소스 및 스타일과 같은 다용도 템플릿 패턴.
  • 원소 트리의 다른 요소와 부모-자식 관계를 맺음으로써 알게 된 값.

종속성 속성은 코드에 대한 XAML for UI 및 C#, Microsoft Visual Basic 또는 Visual C++ 구성 요소 확장(C++/CX)을 사용하여 Windows 런타임 앱을 정의하기 위한 프로그래밍 모델의 특정 기능을 나타내거나 지원합니다. 다음과 같은 기능이 있습니다.

  • 데이터 바인딩
  • 스타일
  • 스토리보드 애니메이션
  • "PropertyChanged" 동작; 종속성 속성을 구현하여 변경 내용을 다른 종속성 속성에 전파할 수 있는 콜백을 제공할 수 있습니다.
  • 속성 메타데이터에서 제공되는 기본값 사용
  • ClearValue 및 메타데이터 조회와 같은 일반 속성 시스템 유틸리티

종속성 속성 및 Windows 런타임 속성

종속성 속성은 런타임에 앱의 모든 종속성 속성을 백업하는 전역 내부 속성 저장소를 제공하여 기본 Windows 런타임 속성 기능을 확장합니다. 속성 정의 클래스에서 프라이빗 필드를 사용하여 속성을 백업하는 표준 패턴 대신 사용할 수 있습니다. 이 내부 속성 저장소는 특정 개체에 대해 존재하는 속성 식별자 및 값 집합이라고 생각할 수 있습니다( DependencyObject인 경우). 이름으로 식별되는 대신 저장소의 각 속성은 DependencyProperty 인스턴스로 식별됩니다. 그러나 속성 시스템은 주로 이 구현 세부 정보를 숨깁니다. 일반적으로 간단한 이름(사용 중인 코드 언어의 프로그래밍 속성 이름 또는 XAML을 작성할 때 특성 이름)을 사용하여 종속성 속성에 액세스할 수 있습니다.

종속성 속성 시스템의 기초를 제공하는 기본 형식은 DependencyObject입니다. DependencyObject는 종속성 속성에 액세스할 수 있는 메서드를 정의하고 DependencyObject 파생 클래스의 인스턴스는 앞에서 멘션 속성 저장소 개념을 내부적으로 지원합니다.

여기에서는 종속성 속성에 대해 설명할 때 설명서에서 우리가 주로 사용하는 용어에 대한 요약입니다.

용어 설명
종속성 속성 DependencyProperty 식별자에 있는 속성입니다(아래 참조). 일반적으로 이 식별자는 정의 DependencyObject 파생 클래스의 정적 멤버로 사용할 수 있습니다.
종속성 속성 식별자 속성을 식별하는 상수 값으로, 일반적으로 공용이며 읽기 전용입니다.
속성 래퍼 호출 가능한 가져오기Windows 런타임 속성에 대 한 구현을 설정 합니다. 또는 원래 정의의 언어별 프로젝션입니다. get 속성 래퍼 구현은 GetValue를 호출하여 관련 종속성 속성 식별자를 전달합니다.

속성 래퍼는 호출자에게 편리한 것이 아니라 속성에 대한 Windows 런타임 정의를 사용하는 모든 프로세스, 도구 또는 프로젝션에 종속성 속성을 노출합니다.

다음 예에서는 C#의 정의대로 사용자 지정 종속성 속성을 정의하고 종속성 속성 식별자와 속성 래퍼의 관계를 보여 줍니다.

public static readonly DependencyProperty LabelProperty = DependencyProperty.Register(
  "Label",
  typeof(string),
  typeof(ImageWithLabelControl),
  new PropertyMetadata(null)
);


public string Label
{
    get { return (string)GetValue(LabelProperty); }
    set { SetValue(LabelProperty, value); }
}

참고 항목

위의 예는 사용자 지정 종속성 속성을 만드는 방법에 대한 완전한 예가 아니며, 코드를 통해 학습 개념을 선호하는 모든 사용자에게 종속성 속성 개념을 표시하기 위한 것입니다. 이 예에 대한 자세한 설명을 보려면 사용자 지정 종속성 속성을 참조하세요.

종속성 속성 값 우선 순위

종속성 속성의 값을 가져오면 Windows 런타임 속성 시스템에 참여하는 다른 속성 기반 입력 중 하나를 통해 해당 속성에 설정된 값을 가져오게 됩니다. 종속성 속성 값 우선 순위는 Windows 런타임 속성 시스템에서 예측 가능한 방식으로 값을 계산할 수 있도록 존재하며 기본 우선 순위 순서도 잘 알고 있어야 합니다. 그렇지 않으면 한 수준의 우선 순위에서 속성을 설정하려고 하지만 다른 항목(시스템, 타사 호출자, 사용자 코드 중 일부)이 다른 수준으로 설정되고 어떤 속성 값이 사용되고 해당 값이 어디에서 왔는지 파악하는 데 어려움을 겪을 수 있습니다.

예를 들어 스타일 및 템플릿은 속성 값을 설정하고 컨트롤의 모양을 설정하기 위한 공유 시작점이 됩니다. 그러나 특정 컨트롤 인스턴스에서 해당 컨트롤에 다른 배경색 또는 다른 텍스트 문자열을 콘텐츠로 제공하는 것과 같이 해당 값을 일반적인 템플릿 값과 변경하려고 할 수 있습니다. Windows 런타임 속성 시스템은 스타일 및 템플릿에서 제공하는 값보다 우선 순위가 높은 로컬 값을 고려합니다. 이렇게 하면 앱별 값이 템플릿을 덮어쓰게 하는 시나리오를 통해 컨트롤이 앱 UI에서 직접 사용하는 데 유용합니다.

종속성 속성 우선 순위 목록

다음은 속성 시스템에서 종속성 속성의 런타임 값을 할당할 때 사용하는 최종적인 순서입니다. 가장 높은 우선 순위가 가장 먼저 나열됩니다. 이 목록 바로 이전의 자세한 설명을 확인할 수 있습니다.

  1. 애니메이션 효과 값: 활성 애니메이션, 시각적 상태 애니메이션 또는 HoldEnd 동작이 있는 애니메이션. 속성에 적용된 애니메이션이 실제로 효과를 발휘하려면 기준 값이 로컬로 설정된 경우에도 애니메이션되지 않은 기준 값보다 높은 우선 순위를 가질 수 있어야 합니다.
  2. 래퍼 속성을 통해 편리하게 로컬 값을 설정할 수도 있으며, 이는 에서 특성 또는 속성 요소로 설정하거나 특정 인스턴스의 속성을 통해 를 호출하여SetValue 설정하는 것과 같습니다. 바인딩 또는 정적 리소스를 사용하여 로컬 값을 설정하는 경우 이러한 각 값은 로컬 값이 설정된 것처럼 우선적으로 작동하며 새 로컬 값이 설정되면 바인딩 또는 리소스 참조가 지워집니다.
  3. 템플릿 속성: 요소가 템플릿의 일부로 만들어진 경우(ControlTemplate 또는 DataTemplate에서) 이러한 요소가 있습니다.
  4. 스타일 setter: 페이지 또는 애플리케이션 리소스의 스타일 내에서 Setter 의 값입니다.
  5. 기본값: 종속성 속성은 메타데이터의 일부로 기본값을 가질 수 있습니다.

템플릿 속성

우선 순위 항목으로서의 Templated 속성은 XAML 페이지 마크업에서 직접 선언한 요소의 어느 속성에도 적용되지 않습니다. 템플릿 속성 개념은 Windows 런타임 XAML 템플릿을 UI 요소에 적용하여 시각적 개체를 정의할 때 생성되는 개체에 대해서만 존재합니다.

컨트롤 템플릿에서 설정된 모든 속성에는 특정 종류의 값이 있습니다. 이러한 값은 컨트롤에 대한 확장된 기본값 집합과 거의 비슷하며 나중에 속성 값을 직접 설정하여 다시 설정할 수 있는 값과 연결되는 경우가 많습니다. 따라서 템플릿 집합 값은 새 로컬 값이 덮어쓸 수 있도록 실제 로컬 값과 구별할 수 있어야 합니다.

참고 항목

경우에 따라 템플릿이 인스턴스에서 설정해야 하는 속성에 대한 {TemplateBinding} 태그 확장 참조를 노출하지 못한 경우 로컬 값도 재정의할 수 있습니다. 이 작업은 일반적으로 속성이 실제로 인스턴스에서 설정되도록 의도되지 않은 경우에만 수행됩니다. 예를 들어 오직 시각적 개체 및 템플릿 동작과 관련이 있고 템플릿을 사용하는 컨트롤의 의도된 함수 또는 런타임 논리와 관련이 없는 경우에만 수행됩니다.

바인딩 및 우선 순위

바인딩 작업은 사용되는 범위에 대해 적절한 우선 순위를 갖습니다. 예를 들어 로컬 값에 적용된 {Binding} 은 로컬 값으로 작동하며 속성 setter에 대한 {TemplateBinding} 태그 확장 은 스타일 setter처럼 적용됩니다. 바인딩은 런타임까지 대기하여 데이터 원본에서 값을 가져와야 하므로 속성의 속성 값 우선 순위를 결정하는 프로세스도 런타임으로 확장됩니다.

바인딩은 로컬 값과 동일한 우선 순위에서 작동할 뿐만 아니라 실제로 로컬 값이며, 여기서 바인딩은 지연된 값의 자리 표시자입니다. 속성 값에 대한 바인딩이 있고 런타임에 로컬 값을 설정하면 바인딩이 완전히 바뀝니다. 마찬가지로 SetBinding을 호출 하여 런타임에만 존재하는 바인딩을 정의하는 경우 XAML 또는 이전에 실행된 코드로 적용했을 수 있는 로컬 값을 바꿀 수 있습니다.

스토리보드 애니메이션 및 기준 값

스토리보드 애니메이션은 기본 값의 개념에 따라 작동합니다. 기본 값은 우선 순위를 사용하여 속성 시스템에 의해 결정되지만 애니메이션을 찾는 마지막 단계는 생략하는 값입니다. 예를 들어 기본 값은 컨트롤의 템플릿에서 오거나 컨트롤 인스턴스에 로컬 값을 설정하여 발생할 수 있습니다. 어느 쪽이든 애니메이션을 적용하면 이 기본 값을 덮어쓰고 애니메이션이 계속 실행되는 한 애니메이션 값을 적용합니다.

애니메이션 속성의 경우 애니메이션이 FromTo를 명시적으로 지정하지 않거나 애니메이션이 완료될 때 속성을 기본 값으로 되돌리기 경우 기본 값은 애니메이션의 동작에 영향을 미칠 수 있습니다. 이러한 경우 애니메이션이 더 이상 실행되지 않으면 나머지 우선 순위가 다시 사용됩니다.

그러나 HoldEnd 동작을 사용하여 To지정하는 애니메이션은 시각적으로 중지된 것처럼 보이는 경우에도 애니메이션이 제거될 때까지 로컬 값을 재정의할 수 있습니다. 개념적으로 이것은 UI에 시각적 애니메이션이 없더라도 영원히 실행되는 애니메이션과 같습니다.

단일 속성에 여러 애니메이션을 적용할 수 있습니다. 이러한 각 애니메이션은 값 우선 순위의 다른 지점에서 온 기본 값을 대체하기 위해 정의되었을 수 있습니다. 그러나 이러한 애니메이션은 모두 런타임에 동시에 실행되므로 각 애니메이션이 값에 동일한 영향을 미치기 때문에 값을 결합해야 하는 경우가 많습니다. 결과는 애니메이션을 정의하는 정확한 방식과 애니메이션되는 값의 유형에 따라 달라집니다.

자세한 내용은 스토리보드 애니메이션을 참조하십시오.

기본값

PropertyMetadata 값을 사용하여 종속성 속성의 기본값을 설정하는 방법은 사용자 지정 종속성 속성 항목에서 자세히 설명합니다.

해당 기본값이 해당 속성의 메타데이터에 명시적으로 정의되지 않은 경우에도 종속성 속성에는 여전히 기본값이 있습니다. 메타데이터로 변경되지 않은 경우 Windows 런타임 종속성 속성의 기본값은 일반적으로 다음 중 하나입니다.

  • 런타임 개체 또는 기본 개체 형식(참조 형식)을 사용하는 속성의 기본값은 null입니다. 예를 들어 DataContext 는 의도적으로 설정되거나 상속될 때까지 null 입니다.
  • 숫자 또는 부울 값(값 형식)과 같은 기본 값을 사용하는 속성은 해당 값에 대해 예상되는 기본값을 사용합니다. 예를 들어 정수 및 부동 소수점 숫자의 경우 0, 부울의 경우 false 입니다.
  • Windows 런타임 구조를 사용하는 속성에는 해당 구조체의 암시적 기본 생성자를 호출하여 얻은 기본값이 있습니다. 이 생성자는 구조체의 각 기본 값 필드에 대한 기본값을 사용합니다. 예를 들어 점 값의 기본값은 X Y 값을 0으로 초기화합니다.
  • 열거형을 사용하는 속성에는 해당 열거형에서 정의된 첫 번째 멤버의 기본값이 있습니다. 특정 열거형에 대한 참조를 확인하여 기본값이 무엇인지 확인합니다.
  • 문자열(.NET용 System.String, C++/CX용 Platform::String)을 사용하는 속성의 기본값은 빈 문자열("")입니다.
  • 컬렉션 속성은 일반적으로 종속성 속성으로 구현되지 않습니다. 이 항목에서 자세히 설명한 이유가 있습니다. 그러나 사용자 지정 컬렉션 속성을 구현하고 종속성 속성이 되도록 하려면 사용자 지정 종속성 속성끝에 설명된 대로 의도하지 않은 싱글톤피해야 합니다.

종속성 속성에서 제공하는 속성 기능

데이터 바인딩

종속성 속성은 데이터 바인딩 적용을 통해 값을 설정할 수 있습니다. 데이터 바인딩은 XAML, {x:Bind} 태그 확장 또는 코드의 Binding 클래스에서 {Binding} 태그 확장 구문을 사용합니다. 데이터 바운드 속성의 경우 최종 속성 값 결정은 런타임까지 지연됩니다. 이때 데이터 원본에서 값을 가져옵니다. 여기서 종속성 속성 시스템에서 수행하는 역할은 값이 아직 알려지지 않은 경우 XAML을 로드한 다음 Windows 런타임 데이터 바인딩 엔진과 상호 작용하여 런타임에 값을 제공하는 등의 작업에 자리 표시자 동작을 사용하도록 설정하는 것입니다.

다음 예제에서는 XAML의 바인딩을 사용하여 TextBlock 요소의 Text 값을 설정합니다. 바인딩은 상속된 데이터 컨텍스트 및 요소 데이터 원본을 사용합니다. (이 두 가지 모두 단축된 예제에 표시되지 않습니다. 컨텍스트 및 원본을 보여 주는 보다 완전한 샘플은 다음을 참조하세요 .데이터 바인딩을 자세히 설명합니다.)

<Canvas>
  <TextBlock Text="{Binding Team.TeamName}"/>
</Canvas>

XAML 대신 코드를 사용하여 바인딩을 설정할 수도 있습니다. SetBinding을 참조하세요.

참고 항목

이와 같은 바인딩은 종속성 속성 값 우선 순위에 따라 로컬 값으로 처리됩니다. 원래 바인딩 값을 보유 했던 속성에 대해 다른 로컬 값을 설정하는 경우 바인딩 의 런타임 값뿐만 아니라 바인딩을 완전히 덮어쓰게 됩니다. {x:Bind} 바인딩은 속성에 대한 로컬 값을 설정하는 생성된 코드를 사용하여 구현됩니다. {x:Bind}를 사용하는 속성에 대해 로컬 값을 설정하는 경우 바인딩이 계산될 때(예: 원본 개체의 속성 변경 내용이 관찰될 때) 해당 값이 바뀝니다.

바인딩 소스, 바인딩 대상, FrameworkElement의 역할

바인딩의 원본이 되려면 속성이 종속성 속성일 필요가 없습니다. 일반적으로 모든 속성을 바인딩 소스로 사용할 수 있지만 프로그래밍 언어에 따라 달라지고 각각 특정 에지 사례가 있습니다. 그러나 {Binding} 태그 확장 또는 Binding의 대상이 되려면 해당 속성이 종속성 속성이어야 합니다. {x:Bind}에는 생성된 코드를 사용하여 바인딩 값을 적용하기 때문에 이 요구 사항이 없습니다.

코드에서 바인딩을 만드는 경우 SetBinding API는 FrameworkElement에 대해서만 정의됩니다. 그러나 BindingOperations를 사용하여 바인딩 정의를 만들 수 있으므로 DependencyObject 속성을 참조할 수 있습니다.

코드 또는 XAML의 경우 DataContext는 FrameworkElement 속성입니다. 바인딩 시스템은 부모-자식 속성 상속 형식(일반적으로 XAML 태그에 설정됨)을 사용하여 부모 요소에 있는 DataContext를 확인할 수 있습니다. 이 상속은 대상 속성이 있는 자식 개체가 FrameworkElement아니므로 자체 DataContext 값을 보유하지 않는 경우에도 평가할 수 있습니다. 그러나 DataContext를 설정하고 유지하려면 상속되는 부모 요소가 FrameworkElement여야 합니다. 또는 DataContext에 대해 null 값을 사용하여 작동할 수 있도록 바인딩을 정의해야 합니다.

바인딩을 배선하는 것만이 대부분의 데이터 바인딩 시나리오에 필요한 것은 아닙니다. 단방향 또는 양방향 바인딩이 적용되려면 원본 속성이 바인딩 시스템과 대상에 전파되는 변경 알림을 지원해야 합니다. 사용자 지정 바인딩 원본의 경우 속성이 종속성 속성이어야 하거나 개체가 INotifyPropertyChanged를 지원해야 함을 의미합니다. 컬렉션은 INotifyCollectionChanged를 지원해야 합니다. 특정 클래스는 데이터 바인딩 시나리오의 기본 클래스로 유용할 수 있도록 구현에서 이러한 인터페이스를 지원합니다. 이러한 클래스의 예는 ObservableCollection<T>. 데이터 바인딩 및 데이터 바인딩이 속성 시스템과 어떻게 관련되는지에 대한 자세한 내용은 데이터 바인딩을 자세히 참조하세요.

참고 항목

여기 표시된 형식은 Microsoft .NET 데이터 원본을 지원합니다. C++/CX 데이터 원본은 변경 알림 또는 관찰 가능한 동작에 서로 다른 인터페이스를 사용합니다. 데이터 바인딩을 자세히 참조하세요.

스타일 및 템플릿

스타일 및 템플릿은 종속성 속성으로 정의되는 속성에 대한 두 가지 시나리오입니다. 스타일은 애플리케이션 UI를 정의하는 속성을 설정하는 데 유용합니다. 스타일은 리소스 컬렉션의 항목 또는 테마 리소스 사전과 같은 별도의 XAML 파일에서 XAML의 리소스로 정의됩니다. 스타일은 속성에 대한 setter를 포함하기 때문에 속성 시스템과 상호 작용합니다. 여기서 가장 중요한 속성은 Control의 Control.Template 속성입니다. 컨트롤의 시각적 모양과 시각적 상태를 대부분 정의합니다. 스타일 및 스타일을 정의하고 setter를 사용하는 XAML 예제에 대한 자세한 내용은 스타일 지정 컨트롤을 참조하세요.

스타일 또는 템플릿에서 제공되는 값은 바인딩과 유사하게 지연된 값입니다. 이렇게 하면 컨트롤 사용자가 컨트롤을 다시 템플릿으로 만들거나 스타일을 다시 정의할 수 있습니다. 따라서 스타일의 속성 setter는 일반 속성이 아닌 종속성 속성에만 작동할 수 있습니다.

스토리보드 애니메이션

스토리보드 애니메이션을 사용하여 종속성 속성의 값에 애니메이션 효과를 적용할 수 있습니다. Windows 런타임 스토리보드 애니메이션은 단순히 시각적 장식이 아닙니다. 애니메이션을 개별 속성 또는 컨트롤의 모든 속성과 시각적 개체의 값을 설정하고 시간이 지남에 따라 이러한 값을 변경할 수 있는 상태 컴퓨터 기술이라고 생각하면 더 유용합니다.

애니메이션 효과를 주려면 애니메이션의 대상 속성이 종속성 속성이어야 합니다. 또한 애니메이션 효과를 주려면 대상 속성의 값 형식이 기존 타임라인 파생 애니메이션 형식 중 하나에서 지원되어야 합니다. 보간 또는 키 프레임 기술을 사용하여 색, 이중 값에 애니메이션 효과를 적용할 수 있습니다. 대부분의 다른 값은 불연속 개체 키 프레임을 사용하여 애니메이션 효과를 줍니다.

애니메이션을 적용하고 실행하면 애니메이션된 값이 속성의 다른 모든 값(예: 로컬 값)보다 높은 우선 순위로 작동합니다. 애니메이션에는 애니메이션이 시각적으로 중지된 것처럼 보이는 경우에도 애니메이션이 속성 값에 적용되도록 할 수 있는 선택적 HoldEnd 동작이 있습니다.

상태 컴퓨터 원칙은 컨트롤에 대한 VisualStateManager 상태 모델의 일부로 스토리보드 애니메이션을 사용하여 구현됩니다. 스토리보드 애니메이션에 대한 자세한 내용은 스토리보드 애니메이션을 참조 하세요. VisualStateManager 및 컨트롤의 시각적 상태 정의에 대한 자세한 내용은 시각적 상태 또는 컨트롤 템플릿에 대한 스토리보드 애니메이션을 참조하세요.

속성 변경 동작

속성 변경 동작은 종속성 속성 용어의 "종속성" 부분의 원본입니다. 다른 속성이 첫 번째 속성의 값에 영향을 줄 수 있는 경우 속성에 유효한 값을 유지 관리하는 것은 많은 프레임워크에서 어려운 개발 문제입니다. Windows 런타임 속성 시스템에서 각 종속성 속성은 속성 값이 변경될 때마다 호출되는 콜백을 지정할 수 있습니다. 이 콜백은 일반적으로 동기 방식으로 관련 속성 값을 알리거나 변경하는 데 사용할 수 있습니다. 대부분의 기존 종속성 속성에는 속성 변경 동작이 있습니다. 사용자 지정 종속성 속성에 유사한 콜백 동작을 추가하고 고유한 속성 변경 콜백을 구현할 수도 있습니다. 예제는 사용자 지정 종속성 속성을 참조하세요.

Windows 10에는 RegisterPropertyChangedCallback 메서드가 도입되었습니다. 이렇게 하면 DependencyObject 인스턴스에서 지정된 종속성 속성이 변경될 때 애플리케이션 코드에서 변경 알림을 등록할 수 있습니다.

기본값 및 ClearValue

종속성 속성은 속성 메타데이터의 일부로 정의된 기본값을 가질 수 있습니다. 종속성 속성의 경우 속성이 처음 설정된 후에는 기본값이 관련이 없습니다. 값 우선 순위의 다른 결정자가 사라질 때마다 런타임에 기본값이 다시 적용될 수 있습니다. (종속성 속성 값 우선 순위는 다음 섹션에서 설명합니다.) 예를 들어 속성에 적용되는 스타일 값이나 애니메이션을 의도적으로 제거할 수 있지만 그렇게 한 후에는 해당 값을 적절한 기본값으로 지정할 수 있습니다. 종속성 속성 기본값은 각 속성의 값을 추가 단계로 구체적으로 설정할 필요 없이 이 값을 제공할 수 있습니다.

이미 로컬 값으로 설정한 후에도 속성을 기본값으로 의도적으로 설정할 수 있습니다. 값을 다시 기본값으로 다시 설정하고 기본값을 재정의할 수 있지만 로컬 값은 재정의할 수 있는 우선 순위에서 다른 참가자를 사용하도록 설정하려면 ClearValue 메서드(메서드 매개 변수로 지우려면 속성을 참조)를 호출합니다. 속성이 항상 기본값을 사용하는 것은 아니지만 로컬 값을 지우고 기본값으로 되돌리기 사용하면 컨트롤 템플릿의 스타일 setter에서 온 값을 사용하는 것과 같이 지금 작업하려는 다른 항목을 우선적으로 사용할 수 있습니다.

DependencyObject 및 스레딩

모든 DependencyObject 인스턴스는 Windows 런타임 앱에 표시되는 현재 과 연결된 UI 스레드에서 만들어야 합니다. 각 DependencyObject는 기본 UI 스레드에서 만들어야 하지만 디스패쳐를 호출하여 다른 스레드의 디스패처 참조를 사용하여 개체에 액세스할 수 있습니다. 그런 다음 CoreDispatcher 개체에서 RunAsync와 같은 메서드를 호출하고 UI 스레드에 대한 스레드 제한 규칙 내에서 코드를 실행할 수 있습니다.

DependencyObject스레딩 측면은 일반적으로 UI 스레드에서 실행되는 코드만 종속성 속성의 값을 변경하거나 읽을 수 있음을 의미하기 때문에 관련이 있습니다. 일반적으로 비동기 패턴 및 백그라운드 작업자 스레드를 올바르게 사용하는 일반적인 UI 코드에서는 스레딩 문제를 방지할 수 있습니다. 일반적으로 DependencyObject 형식을 정의하고 데이터 원본 또는 DependencyObject가 반드시 적절하지 않은 다른 시나리오에 사용하려고 하는 경우에만 DependencyObject 관련 스레딩 문제가 발생합니다.

개념적 자료