이 문서는 수동으로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오.
번역
원본
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

TypeConverter 및 XAML

Silverlight

TypeConverter 클래스는 XAML의 Silverlight 구현에 포함되어 특정 용도로 사용됩니다. XAML 프로세서가 런타임 개체 표현을 만들 때 형식 변환기는 XAML 특성 값을 처리하고 특성 문자열을 개체 값으로 변환합니다. 사용자 지정 클래스를 작성할 때 XAML 특성 값을 통해 클래스 인스턴스를 설정하려는 경우 일반적으로 사용자 지정 TypeConverter 클래스를 작성한 다음 형식 변환기 구현을 참조하는 클래스 또는 속성에 TypeConverterAttribute를 적용해야 합니다.

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

XAML에서 특성 값을 설정할 때 값의 초기 형식은 String입니다. Double 과 같은 다른 기본 형식들도 처음에는 XAML 프로세서에 대해 문자열입니다. Silverlight XAML 프로세서에는 네이티브 형식 변환 기능이 기본 제공되므로 문자열이 아닌 다른 기본 형식 값으로 변환하거나 열거형의 명명된 멤버 값으로 변환하는 것은 비교적 쉽습니다. Silverlight 주요 클래스, 라이브러리 클래스 또는 Silverlight를 기반으로 작성된 코드에서 연결된 속성에 대해 특성 값을 제공하여 XAML에서 새 개체 값을 지정하는 방법을 지원하려는 나머지 경우에는 TypeConverter가 사용됩니다.

XAML 프로세서가 특성 값을 처리하려면 두 가지 정보가 있어야 합니다. 그 중 하나는 설정할 속성 값의 형식입니다. XAML에서 특성 값으로 지정된 모든 문자열은 궁극적으로 속성의 형식인 값으로 변환되거나 확인되어야 합니다. 속성 형식이 기본 형식이면 문자열을 직접 변환하려고 합니다. 속성 형식이 열거형이면 이 문자열을 사용하여 해당 열거형에서 멤버를 확인합니다. 속성 형식이 기본 형식도 아니고 열거형도 아닌 경우 해당 속성 또는 형식의 변환 동작은 제공된 특성 값 문자열 변환에 따라 형식 또는 값의 인스턴스를 제공할 수 있어야 합니다.

Silverlight XAML 프로세서에서 형식 변환 기능이 기본적으로 제공되는 경우도 있습니다. 이러한 형식 변환 기능이 제공되는 경우의 예로는 Point 형식 값이 있습니다. Point 에 대한 형식 변환 기능은 Silverlight XAML 구문 분석 동작에서 기본적으로 제공되며 CLR 특성은 사용되지 않습니다. 다른 경우에는 Silverlight가 TypeConverter 클래스를 구현한 다음 이 클래스를 사용하기 위해 형식이나 멤버에 특성을 지정합니다. 이러한 형식 변환 기능이 제공되는 경우의 예로는 Nullable<bool> 형식 값이 있습니다.

TypeConverter 클래스

값이 기본 형식이나 열거형이 아니고 기본 변환 기능이 없으며 태그 확장도 사용하지 않은 경우 XAML이 처리될 때 String을 적절한 값이나 새 인스턴스로 변환하는 방법이 있어야 합니다. TypeConverter 클래스가 이러한 역할을 수행합니다.

참고 참고:

클래스로서 TypeConverter는 XAML 이외의 다른 용도로 사용할 수 있습니다. TypeConverter는 XAML이 개발되기 전부터 .NET Framework에서 클래스로 사용되었습니다. Silverlight 및 WPF XAML 프로세서와 일반 XAML 디자인에서는 모두 특성 값 변환을 위해 TypeConverter 패턴을 사용합니다. 이 패턴은 형식 변환에 문자열 소스가 관련될 때 변환 요구 사항을 충족하는 기존 코딩 패턴이기 때문입니다.

Silverlight의 TypeConverter 구현에서는 XAML 처리를 위한 문자열 변환에 관련된 두 개의 멤버를 정의합니다.

이 중에서 가장 중요한 메서드는 ConvertFrom(ITypeDescriptorContext, CultureInfo, Object)입니다. 이 메서드는 입력 문자열을 필요한 개체 형식으로 변환합니다.

CanConvertFrom(ITypeDescriptorContext, Type) 은 서비스가 TypeConverter 구현의 기능을 쿼리할 때 사용할 수 있는 지원 메서드입니다. 특정한 경우에, 특히 String 형식에 대해 true를 반환하도록 CanConvertFrom(ITypeDescriptorContext, Type)을 구현해야 합니다.

ITypeDescriptorContext 를 사용하지 않는 시그니처가 아니라 ITypeDescriptorContext를 사용하는 시그니처를 구현합니다. 이 구현 패턴은 TypeConverter를 구현하기 위한 WPF 및 일반 .NET Framework 패턴과 일치하며, XAML 프로세서는 이 시그니처를 호출합니다. 하지만 경우에 따라 ITypeDescriptorContext 또는 CultureInfo에 대한 고정된 값을 전달하여 이렇게 할 수도 있습니다. ITypeDescriptorContext 가 아닌 시그니처의 경우에는 구현 시 기본 구현을 호출해야 합니다.

Silverlight 5 베타는 XAML로부터의 serialization을 위해 형식 변환기를 사용하는 네이티브 serialization을 통합하지 않기 때문에 ConvertToCanConvertTo를 사용하지 않습니다. 변환기 클래스의 더 넓은 상호 운용성을 위한 최선의 방법으로 ConvertToCanConvertTo의 구현을 고려하는 것이 좋습니다.

다음 단원에서는 Silverlight XAML용 형식 변환기를 구현하기 위해 재정의해야 하는 네 가지 가상 메서드에 대해 설명합니다.

ConvertFrom 구현

XAML을 지원하는 TypeConverter 구현으로 사용할 수 있으려면 해당 변환기의 ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) 메서드가 문자열을 value 매개 변수로 허용해야 합니다. 문자열의 서식이 올바르고 TypeConverter 구현을 통해 변환할 수 있으면 반환된 개체를 속성에 필요한 형식으로 캐스팅할 수 있어야 합니다. 그렇지 않으면 ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) 구현이 null을 반환해야 합니다.

TypeConverter 구현은 변환에 유효한 문자열을 자체 방식으로 해석할 수 있습니다.

참고 참고:

문자열 서식의 요소로 중괄호, 특히 {는 사용하지 마십시오. 이러한 문자는 태그 확장 시퀀스의 시작과 끝에 사용하도록 예약되어 있습니다.

CanConvertFrom 구현

CanConvertFrom(ITypeDescriptorContext, Type) 구현은 sourceType 형식이 String이면 true를 반환하고, 그렇지 않으면 기본 구현을 따라야 합니다.

CanConvertTo 및 ConvertTo 구현

앞서 "TypeConverter 클래스" 단원에서 설명한 것처럼, Silverlight는 XAML serialization을 노출하지 않으며 저장 경로 형식 변환 동작 자체도 호출하지 않습니다. 따라서 전용 Silverlight 형식 변환기를 Silverlight에서 사용하려면 일반적으로 base를 호출하는 Visual Studio 생성 구현 재정의 래퍼만 사용하면 됩니다. 이 경우 메서드가 호출되면 변환 예외가 발생하지만, Silverlight 코드는 이러한 메서드 호출을 시도하지 않습니다. 그러나 형식 변환기를 보다 강력하게 만들기 위해 XMAL 이외의 사용법과 같은 구현을 제공할 수 있습니다.

null 일 수 있으므로 context의 정보에 의존하지 마십시오. context 또는 culturenull이면 throw하지 마십시오. context 또는 culture의 입력 값이 null이면 base를 호출하여 null 컨텍스트를 전달해야 합니다. 이 동작을 사용하면 예외의 일관성이 향상됩니다.

Silverlight XAML 파서를 통해 호출될 때 culture는 항상 en-us 문화권이므로 XAML 구문 분석을 지원하는 TypeConverter를 작성하는 경우 해당 동작을 가정할 수 있습니다. 이 동작이 수행되는 이유는 전역적으로 인식되는 응용 프로그램 만들기 항목에 설명되어 있습니다.

문화권 동작은 문자열 구문에서 구문 기호를 처리할 때 특히 중요합니다. 예를 들어 en-us 문화권의 쉼표를 일부 문화권에서 쉼표 문자에 지정되는 소수 구분 기호 사용법과 혼동해서는 안 됩니다. 자세한 내용은 이 항목의 "최선의 TypeConverter 구현 방법" 단원을 참조하십시오.

다른 문화권 값을 지원하면 XAML 지원 이외의 시나리오에 대해 형식 변환을 지원하려는 경우 유용할 수 있습니다.

사용자 지정 형식 변환기를 사용자 지정 클래스의 형식 변환기로 사용하려면 클래스 정의에 TypeConverterAttribute를 적용해야 합니다. 특성을 통해 지정하는 ConverterTypeName은 사용자 지정 형식 변환기의 형식 이름이어야 합니다. 이 특성을 적용하면 속성 형식에 사용자 지정 클래스 형식이 사용되는 경우 XAML 프로세서가 값을 처리할 때 입력 문자열을 처리하고 개체 인스턴스를 반환할 수 있습니다. 흔한 경우는 아니지만 TypeConverterAttribute를 인터페이스에 적용할 수 있습니다. 이 경우 Silverlight 구현 인터페이스는 사용되지 않습니다.

속성별로 형식 변환기를 제공할 수도 있습니다. 이 경우 TypeConverterAttribute를 클래스 정의에 적용하는 대신 속성 정의(기본 정의 내의 get/set 접근자 구현이 아닌 기본 정의 자체)에 적용합니다. 속성 형식은 사용자 지정 형식 변환기를 통해 처리되는 형식과 일치해야 합니다. 이 특성을 적용하면 XAML 프로세서가 속성 값을 처리할 때 입력 문자열을 처리하고 개체 인스턴스를 반환할 수 있습니다. 속성별로 형식 변환기를 제공하는 방법은 특히 클래스 정의를 제어할 수 없고 클래스에 TypeConverterAttribute를 적용할 수 없는 속성 형식을 사용하는 경우 특히 유용합니다.

TypeConverterAttribute 및 파생 클래스

클래스에 TypeConverterAttribute를 적용한 다음 해당 클래스에서 파생시키고 파생된 클래스 형식을 특정 속성 형식으로 사용하면 TypeConverterAttribute 동작이 상속되지 않습니다. 파생 클래스 정의에 다른 TypeConverterAttribute를 다시 적용하거나 속성 형식을 기본 형식으로 변경해야 합니다. XAML 파서는 값에 대해 형식 변환기를 사용할 수 있는지 확인할 때 선언 형식에 정확하게 일치하는 속성 형식을 찾습니다. 일반 CLR 상속 규칙에서는 실제 값에 대한 파생 클래스 또는 기본 클래스를 제공할 수 있습니다.

대상 형식이 아닌 TypeConverterAttribute가 개별 속성에 적용될 경우에는 원래 속성이 숨겨지지 않는 한 속성 소유 형식이 파생되더라도 속성의 변환 동작은 유지됩니다.

일반적으로는 하나 이상의 속성에 대해 특성을 간편하게 사용할 수 있도록 XAML에 대해 TypeConverter를 구현합니다. 일반적으로 사용되는 대부분의 기타 속성이 이미 특성 구문을 지원하며, 새 속성에 대해 속성 요소 구문을 요구하면 태그가 너무 자세해지는 경우 속성에 대해 이러한 구현을 수행합니다.

TypeConverter 를 정의하면 자동 포함 문법이 정의된다는 점을 고려해야 합니다. 따라서 문법을 간단하게 유지하고 사용자가 알고 있거나 직관적으로 사용할 수 있는 문법 규칙을 사용하는 것이 중요합니다. 특성을 적절하게 사용하는 경우 Visual Studio에서 XAML을 편집할 때 속성 창에서 형식 변환을 호출할 수 있습니다. 이렇게 하면 사용자가 형식 변환 사용법을 쉽게 파악할 수 있으며, Visual Studio에서는 속성 편집 기능으로 형식 변환기 사용 속성에 대해 잘못된 입력을 거부합니다. 색 선택과 같은 일부 Visual Studio 속성 시나리오에서는 사용 가능한 형식 변환기 문법과 일치하는 특수 속성 편집기도 지원됩니다. 그러나 XAML을 생성 또는 편집하는 기타 디자인 환경에서는 사용자가 형식 변환 문법을 찾는 데 도움이 되는 힌트가 항상 제공되는 것은 아닙니다. 또한 기타 디자인 환경에서는 런타임에 잘못된 XAML 로드를 시도하기 전에 해당 XAML을 반드시 거부하지는 않으며, 런타임 XAML 파서 오류를 통해 형식 변환기 사용법이 어떻게 잘못되었는지를 항상 파악할 수 있는 것은 아닙니다.

적절한 형식 변환 시나리오의 예로는 해당 데이터를 표현하기 위한 기존 규칙이 다른 태그 패러다임에 있거나 해당 데이터가 언어로 표현되는 방식에 대한 규칙이 있는 경우를 들 수 있습니다. 예를 들어 Point의 형식 변환을 위한 X, Y 형식(X와 Y 사이에 구분 기호로 쉼표 사용)은 수학적 표시 규칙을 기반으로 합니다. 또 다른 예제 시나리오로는 속성이 일반적으로 주 데이터 형식을 지원하는 동시에 주 데이터 형식의 문자열 표현으로는 표시할 수 없는 특정한 특수 값도 지원하는 경우가 있습니다. 이러한 형식 변환 시나리오의 예로는 대개 TimeSpan 값(시간 형식에 대한 고유 형식 변환기를 가짐)을 지원하는 동시에 리터럴 문자열인 Forever와 같은 특수 값도 지원하는 Duration이 있습니다. 이 시나리오에서는 변환된 형식에 정적 필드나 속성을 노출하는 것이 가장 효과적입니다. 이렇게 하면 코드 사용자가 형식 변환기를 만들고 호출하여 문자열 토큰 리터럴을 전달하지 않아도 코드에 사용하기 위한 동일 값이 제공됩니다. CLR 규칙에서 허용하는 경우 이 필드나 속성의 이름은 특수 문법 정보 항목으로 사용하는 리터럴의 이름과 같아야 합니다.

일반적으로 형식 변환 문법에는 여러 정보 항목이 포함됩니다. 형식 변환기가 분할하여 파트로 처리하는 문자열의 아톰 사이에는 보통 쉼표를 구분 기호로 사용합니다. 공백 문자도 구분 기호로 자주 사용되며, 많은 형식 변환기 구현에서는 쉼표나 공백을 구분 기호로 사용된 것으로 처리합니다.

형식을 정의하는 경우 가능하면 항상 TypeConverterAttribute를 속성이 아닌 형식에 적용하십시오. 다음과 같은 경우에는 속성에 대해 TypeConverterAttribute를 예약해야 합니다.

  • 속성 대상 형식은 정의하지 않지만 해당 대상 형식을 속성의 XAML에 사용할 수 있도록 용도를 변경하려는 경우

  • 일반 형식이 여러 속성에 사용되지만 어떤 형식의 값을 값으로 지원할 수 있는지에 대한 유효성 검사 규칙이 각 속성마다 서로 다른 경우

  • 형식은 정의하지만 해당 형식이 TypeConverterAttribute 또는 전체적인 CLR 특성 사용에 필요한 Silverlight 어셈블리에 종속되지 않도록 하려는 경우

형식 변환 문법에서는 여는 중괄호({)를 중요한 문자로 사용하지 마십시오. 이 괄호를 사용하면 XAML 파서가 태그 확장 사용법을 식별하는 방법과 충돌이 발생합니다.

커뮤니티 추가 항목

표시:
© 2015 Microsoft