'XamlParseException'에 해당되는 글 2건
- 2008.07.11 [XamlParseException] 유효한 Converter를 지정하지 않은 DependencyProperty
- 2008.07.11 [XamlParseException] 시리즈 예고
2008. 7. 11. 15:26
[XamlParseException] 유효한 Converter를 지정하지 않은 DependencyProperty
2008. 7. 11. 15:26 in Don't Panic

배경
DependencyProperty는 템플릿 바인딩이나 데이터 바인딩 등 다양한 환경에 필수이고 특히 XAML과 코드를 연결하는 가장 중요한 컨셉이라고 할 수 있죠.
XAML은 Plain Text로 구성된 XML이기 때문에 모든 속성을 '문자열'로 설정하게 되고 이는 타입 안정성에 기반한 닷넷 언어들에 곧바로 적용할 수 없다는 것을 의미해요. 때문에 XAML과 코드 비하인드와의 속성 공유를 위해서는 필연적으로 문자열과 타입간의 변환Convert이 필요한데요, 바로 TypeConverter를 상속하는 어트리뷰트 클래스와 IValueConverter를 상속하는 클래스를 통해 가능하게 되죠. 각 변환 클래스에 대한 설명은 MSDN을 참고하세요.
변환 클래스가 필요한 타입
실버라이트의 런타임은 기본적으로 빌트인 타입(int, double, Thickness 등...)에 대한 변환은 자동으로 수행하지만 사용자가 생성한 모든 종류의 enum, class, struct는 원칙적으로 변환 클래스를 반드시 지정해야 해요. 보다 자세한 사항은 TypeConverter를 참고하세요.
XamlParseException은 굉장히 다양한 Xaml 코드 상의 예외를 말하는데요, 실버라이트 2 베타2부터는 친절하게도 예외(에러)가 발생한 경우 에러가 발생한 XAML의 라인과 컬럼 번호를 알려주죠.
그러나 generic.xaml이나 동적으로 로드한 xaml로 설정한 템플릿 등에서 오류가 발생한 경우 일반적으로 실버라이트 RootVisual의 생성자에 있는 InitializeComponent() 메서드에서 에러가 걸리고 해당 라인과 컬럼을 가보면 해당 템플릿을 사용한 컨트롤을 가리키고 있음을 알 수 있어요.

XamlParseException은 알고 보면 대부분 사용자의 실수이지만 프리컴파일이 되지 않는 XAML의 특성상 사전에 그 문제를 찾아내기란 쉽지가 않고 코드-비하인드에 비해 알려주는 지점이 모호한 경우가 많죠.
이 시리즈는 XamlParseException의 원인이 될 수 있는 다양한 경우에 대해 차근차근 정리하고 충분한 케이스가 모이면 XamlParseException이 발생했을 때의 대응 매뉴얼로 만들 예정이에요.
XamlParseException을 해결한 경험이 있으시면 제보 바랍니다. ^^
그러나 generic.xaml이나 동적으로 로드한 xaml로 설정한 템플릿 등에서 오류가 발생한 경우 일반적으로 실버라이트 RootVisual의 생성자에 있는 InitializeComponent() 메서드에서 에러가 걸리고 해당 라인과 컬럼을 가보면 해당 템플릿을 사용한 컨트롤을 가리키고 있음을 알 수 있어요.

XamlParseException은 알고 보면 대부분 사용자의 실수이지만 프리컴파일이 되지 않는 XAML의 특성상 사전에 그 문제를 찾아내기란 쉽지가 않고 코드-비하인드에 비해 알려주는 지점이 모호한 경우가 많죠.
이 시리즈는 XamlParseException의 원인이 될 수 있는 다양한 경우에 대해 차근차근 정리하고 충분한 케이스가 모이면 XamlParseException이 발생했을 때의 대응 매뉴얼로 만들 예정이에요.
XamlParseException을 해결한 경험이 있으시면 제보 바랍니다. ^^