TypeConverter 및 XAML
업데이트: 2007년 11월
TypeConverter 클래스에는 관리되는 사용자 지정 클래스에 대한 구현에서 XAML(Extensible Application Markup Language) 특성 구문의 속성 값으로 사용할 수 있는 특수한 기능이 있습니다. 사용자 지정 클래스를 작성한 다음 클래스의 인스턴스를 XAML(Extensible Application Markup Language)에서 설정할 수 있는 특성 값으로 사용하려면 클래스에 TypeConverterAttribute를 적용하거나 사용자 지정 TypeConverter 클래스를 작성하거나 또는 둘 다 수행해야 합니다.
이 항목에는 다음 단원이 포함되어 있습니다.
- XAML 및 문자열 값
- 형식 변환기 구현
- TypeConverterAttribute 적용
- 관련 항목
XAML 및 문자열 값
XAML에서 특성 값을 설정할 때 값의 초기 형식은 String입니다. Double과 같은 다른 기본 형식도 처음에는 XAML 프로세서에서 문자열로 인식합니다. 물론 형식 변환이 기본적으로 제공되므로 문자열이 아닌 다른 기본값으로 변환하거나 명명된 열거형 값에서 문자열로 변환하는 것은 비교적 쉽습니다.
XAML 프로세서가 특성 값을 처리하려면 두 가지 정보가 있어야 합니다. 그 중 하나는 설정할 속성의 값 형식입니다. 특성 값을 정의하며 XAML에서 처리되는 모든 문자열은 궁극적으로 이 형식의 값으로 변환되거나 확인되어야 합니다. 값이 기본값이면 문자열을 직접 변환하려고 합니다. 값이 열거형이면 이 문자열을 사용하여 해당 열거형에서 일치하는 이름이 있는지 확인합니다. 값이 기본값도 아니고 열거형도 아닌 경우 해당 형식은 변환되는 문자열에 따라 형식의 인스턴스 또는 값도 제공할 수 있어야 합니다.
태그 확장은 특수한 경우입니다. 태그 확장 사용은 속성 형식 및 다른 사항을 확인하기에 앞서 XAML 프로세서를 통해 처리되어야 합니다. 일반적으로 태그 확장의 목적은 문자열을 처리하고 개체를 반환하는 것입니다. 반환된 개체의 형식이 속성의 형식과 일치하면 태그 확장 구현 코드 외부에서 형식 변환이 일어나지 않도록 태그 확장에서 속성의 값을 제공합니다. 일반적으로 태그 확장이 필요한 경우는 이미 있는 개체를 참조하는 경우입니다. 상태 비저장 형식 변환기는 새 인스턴스를 생성할 수 있지만 이는 바람직하지 않을 수도 있습니다. 태그 확장에 대한 자세한 내용은 태그 확장 및 XAML을 참조하십시오.
TypeConverter
값이 기본 형식이나 열거형이 아니고 태그 확장도 사용하지 않은 경우 XAML이 처리될 때 String을 적절한 값이나 새 인스턴스로 변환하는 방법이 있어야 합니다. 이것이 바로 TypeConverter 구현이 수행할 역할입니다. TypeConverter는 XAML 처리를 위해 문자열로 또는 문자열에서 다른 형식으로 변환하는 것과 관련된 네 개의 멤버를 정의합니다.
이 중에서 가장 중요한 메서드는 ConvertFrom입니다. 이 메서드는 입력 문자열을 필요한 개체 형식으로 변환합니다.
그 다음으로 중요한 메서드는 ConvertTo입니다. WPF 응용 프로그램을 태그 표현으로 변환하는 경우(예: 응용 프로그램을 XAML로 저장) ConvertTo는 태그 표현을 생성하는 작업을 담당합니다.
CanConvertTo와 CanConvertFrom은 서비스에서 TypeConverter 구현의 기능을 쿼리할 때 사용되는 지원 메서드입니다. 이 메서드는 특정한 경우에, 특히 String 형식에 대해 true를 반환하도록 구현해야 합니다.
형식 변환기 구현
ConvertFrom 구현
XAML을 지원하는 TypeConverter 구현으로 사용할 수 있으려면 해당 변환기의 ConvertFrom 메서드가 문자열을 value 매개 변수로 허용해야 합니다. 문자열의 형식이 올바르고 TypeConverter 구현을 통해 변환할 수 있으면 반환된 개체를 속성에 필요한 형식으로 캐스팅할 수 있어야 합니다. 그렇지 않으면 ConvertFrom 구현이 null을 반환해야 합니다.
각 TypeConverter 구현은 변환할 수 있는 문자열을 구성하는 요소를 고유한 방식으로 해석할 수 있습니다. 또한 매개 변수로 전달된 형식 설명이나 문화권 컨텍스트를 사용하거나 무시할 수 있습니다. 하지만 어떤 경우에 해당하든 WPF XAML 처리에서 형식 설명 컨텍스트에 값을 전달하지 않거나 xml-lang을 기반으로 문화권을 전달하지 않을 수도 있습니다.
참고
문자열 형식의 요소로 중괄호, 특히 {는 사용하지 마십시오. 이러한 문자는 태그 확장 시퀀스의 시작과 끝에 사용하도록 예약되어 있습니다.
ConvertTo 구현
ConvertTo는 serialization을 지원하기 위해 사용됩니다. 사용자 지정 형식에 대한 serialization 지원은 필수 요구 사항이 아닙니다. 하지만 컨트롤을 구현하거나 클래스의 기능 또는 디자인의 일부로 serialization을 사용하는 경우에는 ConvertTo를 구현해야 합니다.
XAML을 지원하는 TypeConverter 구현으로 사용할 수 있으려면 해당 변환기의 ConvertTo 메서드가 지원되는 형식 또는 값의 인스턴스를 value 매개 변수로 허용해야 합니다. destinationType 매개 변수가 String 형식이면 반환된 개체를 String으로 캐스팅할 수 있어야 합니다. 반환된 문자열은 value의 serialize된 값을 나타내야 합니다. serialization 형식을 선택할 때, 동일한 변환기의 ConvertFrom 구현에 문자열이 전달되는 경우 중요한 정보를 손실하지 않고 동일한 값을 생성할 수 있는 형식을 선택하는 것이 가장 좋습니다.
값을 serialize할 수 없거나 변환기가 serialization을 지원하지 않으면 ConvertTo 구현이 null을 반환해야 하고, 이 경우 예외를 throw할 수 있어야 합니다.
destinationType 매개 변수가 String 형식이 아니면 고유 변환기 처리를 선택할 수 있습니다. 대개는 기본 구현 처리를 사용합니다.
각 TypeConverter 구현은 변환할 수 있는 문자열을 구성하는 요소를 고유한 방식으로 해석할 수 있습니다. 또한 매개 변수로 전달된 형식 설명이나 문화권 컨텍스트를 사용하거나 무시할 수 있습니다.
참고
문자열 형식의 요소로 중괄호, 특히 {는 사용하지 마십시오. 이러한 문자는 태그 확장 시퀀스의 시작과 끝에 사용하도록 예약되어 있습니다.
CanConvertTo 구현
CanConvertTo 구현은 destinationType 형식이 String이면 true를 반환하고, 그렇지 않으면 기본 구현을 따라야 합니다.
CanConvertFrom 구현
CanConvertFrom 구현은 destinationType 형식이 String이면 true를 반환하고, 그렇지 않으면 기본 구현을 따라야 합니다.
TypeConverterAttribute 적용
사용자 지정 형식 변환기를 사용자 지정 클래스의 형식 변환기로 사용하려면 클래스 정의에 .NET Framework 특성 TypeConverterAttribute를 적용해야 합니다. 특성을 통해 지정하는 ConverterTypeName은 사용자 지정 형식 변환기의 형식 이름이어야 합니다. 이 특성을 적용하면 속성 형식에 사용자 지정 클래스 형식이 사용되는 경우 XAML 프로세서가 값을 처리할 때 입력 문자열을 처리하고 개체 인스턴스를 반환할 수 있습니다.
속성별로 형식 변환기를 제공할 수도 있습니다. 이 경우 .NET Framework 특성 TypeConverterAttribute를 클래스 정의에 적용하는 대신 속성 정의(기본 정의 내의 get/set 구현이 아닌 기본 정의 내)에 적용합니다. 속성 형식은 사용자 지정 형식 변환기를 통해 처리되는 형식과 일치해야 합니다. 이 특성을 적용하면 XAML 프로세서가 속성 값을 처리할 때 입력 문자열을 처리하고 개체 인스턴스를 반환할 수 있습니다. 속성별로 형식 변환기를 제공하는 방법은 특히 클래스 정의를 제어할 수 없거나 클래스 정의에 TypeConverterAttribute를 적용할 수 없는 일부 다른 라이브러리 또는 Microsoft .NET Framework의 속성 형식을 사용하는 경우 유용합니다.