XAML을 위한 형식 변환기 및 태그 확장Type Converters and Markup Extensions for XAML

형식 변환기 및 태그 확장은 XAML 형식 시스템과 XAML 작성기가 개체 그래프 구성 요소를 생성하는 데 사용하는 두 가지 기술입니다.Type converters and markup extensions are two techniques that XAML type systems and XAML writers use to generate object graph components. 일부 특징을 공유하지만 형식 변환기 및 태그 확장은 XAML 노드 스트림에서 다르게 표현됩니다.Although they share some characteristics, type converters and markup extensions are represented differently in a XAML node stream. 이 설명서 집합에서는 때때로 형식 변환기, 태그 확장 및 유사한 구문을 총체적으로 값 변환기라고 합니다.In this documentation set, type converters, markup extensions, and similar constructs are sometimes collectively referred to as value converters.

값 변환기Value Converters

XAML에서 값 변환기는 다양한 시나리오에 사용됩니다.In XAML, value converters are used for various scenarios. 다음 목록에서는 XAML의 다양한 값 변환기 유형을 보여 줍니다.The following list shows the different types of value converters in XAML:

  • 형식 변환기Type converter

  • 태그 확장Markup extension

  • 값 직렬 변환기Value serializer

  • XAML 텍스트 구문에 대한 논리를 제공하는 관련 클래스 또는 지원 클래스Related class or support class that provides the logic for a XAML text syntax

형식 변환기Type Converters

.NET XAML 서비스 정의에서 형식 변환기는 CLR 클래스에서 파생 되는 클래스입니다 TypeConverter .In .NET XAML Services definition, type converters are classes that derive from the CLR TypeConverter class. TypeConverter 는 XAML이 존재 하기 전에 .NET에 있던 클래스입니다.TypeConverter is a class that was in the .NET before XAML existed. 원래 용도는 IDE 속성에 대해 속성 창 및 유사한 텍스트 기반 편집 메타포를 지 원하는 것 이었습니다.Its original purpose was to support property windows and similar text-based editing metaphors for IDE properties. .NET to .NET은를 사용 하 여 TypeConverter 텍스트 구문 (특성 값 또는 XAML 값 노드에 있음)을 개체로 변환 합니다.The introduction of XAML to .NET uses TypeConverter to convert a text syntax (as found in an attribute value or a XAML value node) into an object. TypeConverter 를 사용하여 개체 값을 텍스트 구문으로 직렬화할 수도 있습니다.TypeConverter can also be used to serialize an object value to text syntax. TypeConverter 는 Windows Presentation Foundation (WPF) 및 Windows Communication Foundation (WCF)의 이전 프레임 워크 관련 XAML 구현 에서도 사용 되었습니다.TypeConverter was also used in previous framework-specific XAML implementations in Windows Presentation Foundation (WPF) and Windows Communication Foundation (WCF). XAML의 TypeConverter 에 대한 자세한 내용은 Type Converters for XAML Overview의 이전 프레임워크별 XAML 구현에서도 사용되었습니다.For more information about the TypeConverter in XAML, see Type Converters for XAML Overview.

태그 확장Markup Extensions

.NET XAML 서비스 구현에서 태그 확장은 클래스에서 파생 되는 클래스 MarkupExtension 입니다.In .NET XAML Services implementation, markup extensions are classes that derive from the MarkupExtension class. 태그 확장은 이 폼에서 XAML 언어에 의해 시작되는 개념입니다.Markup extensions are a concept that in this form is originated by the XAML language. 태그 확장은 논리 제공을 위해 서비스 클래스를 호출하는 확장 가능한 이스케이프 시퀀스와 같은 것으로 간주할 수 있습니다.You can think of a markup extension as being something like an extensible escape sequence that calls into a service class to provide its logic. 태그 측면에서 XAML 프로세서는 텍스트 문자열에서 여는 중괄호({)로 시작하는 텍스트 시퀀스를 통해 태그 확장을 보편적으로 인식합니다.In terms of markup, XAML processors universally recognize a markup extension by a text sequence that starts with an opening brace ({) in a text string.

태그 확장은 형식 변환기와 다릅니다.Markup extensions differ from type converters. 형식 변환기는 일반적으로 형식 또는 멤버와 연결됩니다.Type converters are typically associated with types or members. 개체 그래프를 만들거나 직렬화 시 해당 엔터티와 연결된 텍스트 구문이 발견될 때 호출됩니다.They are invoked when an object graph creation or a serialization encounters text syntax that is associated with those entities.

태그 확장은 단일 지원 서비스 클래스와 연결되지만 모든 멤버 값에 대해 적용할 수 있습니다.Markup extensions are associated with a single supporting service class, but can be applied for any member value. 그러나 서비스 컨텍스트를 사용 하 여 의도적으로 특정 멤버나 대상 형식에 대 한 사용을 제한 하기 위해 태그 확장을 구현할 수 있습니다. 태그 확장은 형식 변환기 연결을 재정의할 수 있습니다.(However, you can implement your markup extension to deliberately restrict its use to certain members or destination types, by using service context.) Markup extensions can override a type converter association. 또는 그렇지 않을 경우 텍스트 구문을 지원하지 않는 멤버에 대한 특성 값을 지정하는 데 사용할 수 있습니다.Or you can use them to specify an attribute value for members that would not otherwise support a text syntax.

XAML에 대한 태그 확장 구현 패턴에 대한 자세한 내용은 Markup Extensions for XAML Overview.For more information about the markup extension implementation pattern for XAML, see Markup Extensions for XAML Overview.

값 직렬 변환기Value Serializers

ValueSerializer 는 개체를 문자열로 변환하는 작업에 최적화된 특수 형식 변환기입니다.A ValueSerializer is a specialized type converter that is optimized for converting an object to a string. XAML용 ValueSerializerConvertFrom 메서드를 구현하지 않을 수도 있습니다.A ValueSerializer for XAML might not implement the ConvertFrom method at all. ValueSerializer 구현은 TypeConverter 구현과 유사한 방식으로 서비스를 가져옵니다.A ValueSerializer implementation obtains services in a manner that is like a TypeConverter implementation. 가상 메서드는 입력 context 매개 변수를 제공합니다.The virtual methods provide an input context parameter. context 매개 변수는 IValueSerializerContext인터페이스에서 상속되고 IServiceProvider 메서드를 포함하는 GetService 형식입니다.The context parameter is of type IValueSerializerContext, which inherits from the IServiceProvider interface and has a GetService method.

XAML 형식 시스템에서 직렬화를 위해 XAML 노드 루프 처리를 사용하는 XAML 작성기 구현의 경우 형식 또는 멤버와 연결된 값 변환기가 자체 XamlType.ValueSerializer 속성에 의해 보고됩니다.In the XAML type system and for XAML writer implementations that use XAML node loop processing for serialization, a value converter that is associated with a type or member is reported by its own XamlType.ValueSerializer property. 직렬화를 수행하는 XAML 작성기에 대한 의미는 XamlType.TypeConverterXamlType.ValueSerializer 가 있을 경우 부하 경로에 대해 형식 변환기를 사용해야 하고 저장 경로에 대해 값 직렬 변환기를 사용해야 한다는 것입니다.The meaning to XAML writers that perform serialization is that if a XamlType.TypeConverter and XamlType.ValueSerializer exist, the type converter should be used for the load path and the value serializer should be used for the save path. XamlType.TypeConverter 가 있지만 XamlType.ValueSerializernull이면 저장 경로에도 형식 변환기가 사용됩니다.If XamlType.TypeConverter exists but XamlType.ValueSerializer is null, the type converter is also used for the save path.

기타 값 변환기Other Value Converters

값 변환기는 형식 변환기 또는 태그 확장의 특정 패턴 이상으로 확장할 수 있습니다.A value converter is extensible beyond the specific patterns of a type converter or a markup extension. 그러나이 사용자 지정을 수행 하려면 .NET XAML 서비스에서 제공 하는 XAML 형식 시스템도 재정의 해야 합니다.However, this customization would also require the redefinition of the XAML type system as provided by .NET XAML Services. 기존 XAML 형식 시스템은 형식 변환기, 태그 확장 및 값 직렬 변환기에 대한 표현 및 보고 시스템을 포함하지만 사용자 지정 형식의 값 변환에 대한 표현 및 보고 시스템은 없습니다.The existing XAML type system has representations and reporting systems for type converters, markup extensions, and value serializers, but not for custom forms of value conversion. 사용자 지정 값 변환기를 만들려는 경우 XamlValueConverter<TConverterBase> 형식을 사용합니다.If you want to create custom value converters, use the XamlValueConverter<TConverterBase> type.

형식 변환기 및 태그 확장 조합Type Converters and Markup Extensions in Combination

태그 확장 및 형식 변환기는 XAML에서 다양한 상황에 사용됩니다.Markup extensions and type converters are used for different situations in XAML. 태그 확장 사용에 컨텍스트를 사용할 수는 있지만 태그 확장에서 값을 제공하는 속성의 형식 변환 동작은 일반적으로 태그 확장 구현에서 확인되지 않습니다.Although context is available for markup extension usages, type conversion behavior of properties where a markup extension provides a value is generally is not checked in the markup extension implementations. 즉, 태그 확장에서 텍스트 문자열을 해당 ProvideValue 출력으로 반환하는 경우에도 특정 속성 또는 속성 값 형식에 적용될 때 해당 문자열의 형식 변환 동작은 호출되지 않습니다.In other words, even if a markup extension returns a text string as its ProvideValue output, type conversion behavior on that string as applied to a specific property or property value type is not invoked. 일반적으로 태그 확장의 목적은 문자열을 처리하고 관련된 형식 변환기 없이 개체를 반환하는 것입니다.Generally, the purpose of a markup extension is to process a string and return an object without any type converter involved.

값 변환기에 대한 서비스 컨텍스트Service Context for a Value Converter

값 변환기를 구현할 때 값 변환기가 적용되는 컨텍스트에 액세스해야 하는 경우가 많습니다.When you implement a value converter, you often need access to a context in which the value converter is applied. 이 컨텍스트를 서비스 컨텍스트라고 합니다.This context is known as the service context. 서비스 컨텍스트에는 활성 XAML 스키마 컨텍스트와 같은 정보, XAML 스키마 컨텍스트 및 XAML 개체 작성기에서 제공 하는 형식 매핑 시스템에 대 한 액세스 권한 등이 포함 될 수 있습니다.The service context might include information such as the active XAML schema context, access to the type-mapping system that the XAML schema context and XAML object writer provide, and so on. 값 변환기에 사용 가능한 서비스 컨텍스트 및 서비스 컨텍스트에서 제공하는 서비스에 액세스하는 방법에 대한 자세한 내용은 Service Contexts Available to Type Converters and Markup Extensions를 참조하세요.For more information about the service contexts available for a value converter and how to access the services that a service context might provide, see Service Contexts Available to Type Converters and Markup Extensions.

참고 항목See also