2009-07-31 4 views
3

XAML 파서는 Foreground = "Red"에서 문자열 "Red"를 SolidColorBrush로 어떻게 변환합니까? 비록 Type이 System.ComponentModel.TypeConverter를 가지고 있다는 것을 알고 있지만, WPF XAML 파서는 항상 문자열을 브러시로 변환하기 위해 사용합니다. XamlReader.Load (유효한 XML 문자열이 필요함)와 별도로 XAML API가 있습니까? 특정 속성에 대한 attibute와 같이 단일 문자열을 구문 분석하는 데 사용할 수 있습니까?문자열을 XAML 특성으로 수동 구문 분석

답변

-1

본인 스스로가이를 활용할 수 있다고 생각합니다. XamlReader는 대상 형식 (문자열을 적용해야하는 속성 형식)을 알고 있습니다. 해당 속성 유형에 대해 TypeConverter를 등록해야합니다. 이 SolidColorBrush에 관해서이 당신을 위해 작동합니다

편집 :

var colorString = ...; 
var converter = new System.Windows.Media.BrushConverter(); 
var brush = (SolidColorBrush)converter.ConvertFromString(colorString); 

는 .NET 리플렉터 SolidColorBrush 보면, XamlReader 내에서 직렬화를 수행 마법 주위 유형 알려진 내부 API를 사용 보인다. 이 유형을 처리하기 위해 자신의 유형을 등록 할 수 있는지 여부는 확실하지 않습니다.

+0

네, 어떻게 이런 일을하는 겁니까? 그러나 XamlReader가 항상 TypeConverters를 사용하여 문자열을 구문 분석하지는 않는 것으로 나타났습니다. 따라서 XamlReader는 typeconverters와 별도로 구문 분석을위한 좀 더 많은 논리를 가져야합니다. 내 질문은 API로 어딘가에 노출 된 것인가? – bitbonk

0

XAML 파서 (WPF 용)는 실제로 지정된 속성 또는 속성 유형의 형식 변환기를 사용합니다. 몇 가지 하드 코딩 된 단축키가 있지만 성능을 위해 사용되며 의미를 변경하지 않습니다. 파서는 속성 정보 만 사용하여 파서 의미 (예 : 블렌드 및 사이더의 기능)를 복제 할 수 있습니다.

많은 형식 변환이 XAML 구문 구문에서만 작동하기 때문에 주로 XAML과 정확하게 값을 변환 할 API가 없습니다. 예를 들어 형식 변환기는 XAML 파일에 정의 된 네임 스페이스 (값이 XML 파일의 위치에 따라 달라짐)와 파일의 기타 주변 정보 기반 URI를 참조 할 수 있습니다. 이는 XAML 파일을 구문 분석 할 때만 실제로 적용 할 수 있습니다.

가장 가까운 사용자는 유형 설명자에서 속성에 대한 속성 설명자를 요청하고 Converter 속성을 사용하는 것입니다. 이렇게하면 적절한 특성을 검색하여 올바른 형식 변환기를 만들 수 있습니다.

관련 문제