다음을 통해 공유


XAML을 위한 형식 변환기 및 태그 확장

형식 변환기 및 태그 확장은 개체 그래프 구성 요소를 생성하기 위해 XAML 형식 시스템 및 XAML 작성기가 사용하는 두 가지 기술입니다. 형식 변환기와 태그 확장은 공통적인 특징도 있지만 XAML 노드 스트림에서 다르게 표현됩니다. 이 설명서 모음에서는 종종 형식 변환기, 태그 확장 및 비슷한 구문을 통틀어 값 변환기라고 합니다.

이 항목에는 다음 단원이 포함되어 있습니다.

  • 값 변환기
  • 형식 변환기
  • 태그 확장
  • 값 Serializer
  • 기타 값 변환기
  • 형식 변환기 및 태그 확장을 함께 사용
  • 값 변환기에 대한 서비스 컨텍스트
  • 관련 항목

값 변환기

XAML에서 값 변환기는 다양한 시나리오에 사용됩니다. 다음 목록에서는 XAML의 다양한 값 변환기 유형을 보여 줍니다.

  • 형식 변환기

  • 태그 확장

  • 값 serializer

  • XAML 텍스트 구문에 대한 논리를 제공하는 관련 클래스 또는 지원 클래스

형식 변환기

.NET Framework XAML 서비스 정의에서 형식 변환기는 CLR TypeConverter 클래스에서 파생되는 클래스입니다. TypeConverter는 XAML이 존재하기 전에 Microsoft .NET Framework에 있던 클래스입니다. 원래 용도는 IDE 속성에 대한 속성 창 및 그와 유사한 텍스트 기반 편집 기능을 지원하는 것입니다. .NET Framework에 XAML이 도입됨에 따라 특성 값 또는 XAML 값 노드에 있는 텍스트 구문을 개체로 변환하는 데는 TypeConverter를 사용합니다. TypeConverter를 사용하여 개체 값을 텍스트 구문으로 serialize할 수도 있습니다. TypeConverter는 Windows Presentation Foundation (WPF) 및 WCF(Windows Communication Foundation)에서 이전의 프레임워크 관련 XAML 구현에도 사용되었습니다. XAML의 TypeConverter에 대한 자세한 내용은 XAML을 위한 형식 변환기 개요를 참조하십시오.

태그 확장

.NET Framework XAML 서비스 구현에서 태그 확장은 MarkupExtension 클래스에서 파생되는 클래스입니다. 태그 확장은 XAML 언어에서 이 형태로 시작되는 개념입니다. 태그 확장은 해당 논리를 제공하기 위해 서비스 클래스에 호출되는 확장 가능한 이스케이프 시퀀스와 같은 것으로 간주할 수 있습니다. 태그와 관련하여 XAML 프로세서는 텍스트 문자열에서 여는 중괄호({)로 시작하는 텍스트 시퀀스를 통해 태그 확장을 보편적으로 인식합니다.

태그 확장은 형식 변환기와 다릅니다. 형식 변환기는 일반적으로 형식이나 멤버에 연결되며, 개체 그래프 작성 또는 serialization 시 해당 엔터티와 연결된 텍스트 구문이 발견될 때마다 호출됩니다.

태그 확장은 단일 지원 서비스 클래스와 연결되지만 모든 멤버 값에 적용할 수 있습니다. 하지만 서비스 컨텍스트를 사용하여 특정 멤버 또는 대상 형식에만 태그 확장을 사용하도록 의도적으로 제한할 수 있게 태그 확장을 구현할 수 있습니다. 태그 확장은 형식 변환기 연결을 재정의할 수 있으며, 이를 사용하여 텍스트 구문을 지원하지 않는 멤버에 대한 특성 값을 지정할 수 있습니다.

XAML의 태그 확장 구현 패턴에 대한 자세한 내용은 XAML 태그 확장 개요를 참조하십시오.

참고참고

MarkupExtensionValueSerializer 형식은 모두 System.Xaml 네임스페이스가 아니라 System.Windows.Markup 네임스페이스에 있습니다.이는 이러한 형식이 문자열 Windows가 포함된 CLR 네임스페이스를 채우는 WPF 또는 Windows Forms 기술에만 관련되어 있음을 의미하지는 않습니다.MarkupExtensionValueSerializer는 System.Xaml 어셈블리에 있으며 특정 프레임워크에 대한 종속성이 없습니다..NET Framework 3.0의 경우 이러한 형식은 CLR 네임스페이스에 존재하며 .NET Framework 4에서는 기존 WPF 프로젝트에서 참조가 해제되지 않도록 CLR 네임스페이스에 계속 존재합니다.자세한 내용은 WPF에서 System.Xaml로 마이그레이션된 형식을 참조하십시오.

값 Serializer

ValueSerializer는 개체를 문자열로 변환하기 위해 최적화된 특수한 형식 변환기입니다. XAML의 ValueSerializer는 ConvertFrom 메서드를 전혀 구현하지 않을 수 있습니다. ValueSerializer 구현은 TypeConverter 구현과 비슷한 방식으로 서비스를 가져옵니다. 가상 메서드는 입력 context 매개 변수를 제공합니다. context 매개 변수는 IServiceProvider 인터페이스에서 상속하고 GetService 메서드가 있는 IValueSerializerContext 형식입니다.

XAML 형식 시스템에서 serialization에 XAML 노드 루프 처리를 사용하는 XAML 작성기 구현의 경우 형식 또는 멤버와 연결된 값 변환기는 자체적인 XamlType.ValueSerializer 속성에 의해 보고됩니다. serialization을 수행하는 XAML 작성기 관점에서 이는 XamlType.TypeConverterXamlType.ValueSerializer가 있는 경우 로드 경로에는 형식 변환기를 사용하고 저장 경로에는 값 serializer를 사용해야 한다는 것을 의미합니다. XamlType.TypeConverter가 있지만 XamlType.ValueSerializer가 null이면 형식 변환기가 저장 경로에도 사용됩니다.

기타 값 변환기

특정 패턴의 형식 변환기 또는 태그 확장 이외의 영역으로 값 변환기를 확장할 수 있습니다. 그러나 이러한 사용자 지정에는 .NET Framework XAML 서비스에서 제공하는 XAML 형식 시스템을 다시 정의하는 작업도 필요합니다. 기존 XAML 형식 시스템에는 형식 변환기, 태그 확장 및 값 serializer를 위한 표현 및 보고 시스템이 있지만 사용자 지정 형식의 값 변환을 위한 표현 및 보고 시스템은 없습니다. 사용자 지정 값 변환기를 만들려면 XamlValueConverter<TConverterBase> 형식을 사용합니다.

형식 변환기 및 태그 확장을 함께 사용

태그 확장과 형식 변환기는 XAML에서 서로 다른 상황에 사용됩니다. 태그 확장 사용에 컨텍스트를 사용할 수 있지만 태그 확장이 값을 제공하는 속성의 형식 변환 동작은 일반적으로 태그 확장 구현에서 확인되지 않습니다. 즉, 태그 확장이 ProvideValue 출력으로 텍스트 문자열을 반환하는 경우에도 특정 속성이나 속성 값 형식에 적용될 때 해당 문자열에서 형식 변환 동작이 호출되지 않습니다. 일반적으로 태그 확장의 목적은 형식 변환기 없이 문자열을 처리하고 개체를 반환하는 것입니다.

값 변환기에 대한 서비스 컨텍스트

값 변환기를 구현하는 경우 흔히 값 변환기가 적용되는 컨텍스트에 액세스해야 합니다. 이 컨텍스트를 서비스 컨텍스트라고 합니다. 서비스 컨텍스트에는 활성 XAML 스키마 컨텍스트와 같은 정보, XAML 스키마 컨텍스트 및 XAML 개체 작성기가 제공하는 형식 매핑 시스템에 대한 액세스 권한 등이 포함될 수 있습니다. 값 변환기에 사용할 수 있는 서비스 컨텍스트와 서비스 컨텍스트가 제공할 수 있는 서비스에 액세스하는 방법에 대한 자세한 내용은 형식 변환기 또는 태그 확장에서 사용할 수 있는 서비스 컨텍스트를 참조하십시오.

참고 항목

참조

MarkupExtension

XamlObjectWriter

기타 리소스

XAML 태그 확장 개요

XAML을 위한 형식 변환기 개요

형식 변환기 또는 태그 확장에서 사용할 수 있는 서비스 컨텍스트