2009-08-14 4 views
3

내 컨트롤 중 하나의 width 속성을 qualifiedDouble,
as described here on MSDN으로 설정하려고합니다.
FrameworkElement.Width 속성을 코드 숨김 형식의 qualifiedDouble 값으로 설정하는 방법은 무엇입니까?

는 그러나, 나는 오히려 XAML보다, 코드 숨김에서이를 달성하는 방법을 알고 싶어요 (A qualifiedDouble의 사용에 대한 MSDN의 정보를 볼 수있는 "XAML 값"섹션으로 이동). 내가 만들고있는 UserControl에는 상속 목적으로 XAML이 첨부되어 있지 않습니다. 그래서 저는 C#에서 할 수있는 모든 것을 사용하여 수동으로 모든 XAML 작업을 수행해야합니다.

코드 백엔드에서 qualifiedDouble이 어떻게 달성되는지 아는 사람이 있습니까?

+0

조금 더 많은 정보와 "10px"로 내 대답을 편집했습니다. –

답변

5

우연의 일치, 오늘 나는 이것을해야만했다. 자격을 얻은 복식은 당신이 그것을주는 단위에 기초한 요인 전환을 거치지 만, LengthConverter의 일부로 끝납니다.

LengthConverter lc = new LengthConverter(); 
string qualifiedDouble = "10pt"; 

double converted = lc.ConvertFrom(qualifiedDouble); 

대체는 :

double original = 10.0; 
double converted = original * 1.333333333; // px-to-pt conversion 

이 예를 들어, 13.3333333으로 "는 10pt"를 변형시킬 것이다. 기사에서 제공하는 전환 요소를 사용할 수도 있지만 요소가 클래스에 내장되어 있기 때문에 위의 내용을 사용하는 것을 선호합니다.

편집 : 응답에서

문자열 변환이 의도 된 것에 대해 완벽한 의미가 있습니다 ... 문자열에 대해 언급합니다. XAML은 C#이나 VB보다 XAML에서 표현하기가 훨씬 쉽기 때문에 XAML을 사용합니다. XAML에서 모든 값은 문자열이므로 문자열을 대상 유형으로 변환하려면 TypeConverter이 자동으로 선택되어 있어야합니다. 예를 들어 FontSizeConverterLengthConverter에 내부 정적 메서드를 호출합니다. (대신 FontSizeConverter을 인스턴스화 할 수도 있습니다.) 또한 "4 *"와 같은 GridLength 및 "자동"과 같은 Width과 같은 변환기도 있습니다. 또는 말했듯이, 당신은 문자열없이 변환 할 당신 자신의 클래스를 만들 수 있습니다.

This article은 코드 숨김을 위해 요소를 직접 사용하도록 권장하므로 위의 대체 예제를 제공했습니다.

+0

이것은 의미가 있습니다. 비록 그것이 런타임 문자열 변환이라는 점에 조금 실망 스럽지만. Microsoft는 문자열에 너무 많이 의존하고 있습니다. – Giffyguy

+0

아, 그건 의미가 있습니다. 그들은 문자열이있는 쇠고기가 있으면 변환을 직접 수행하기를 원합니다. 문자열 변환과 관련한 특히 문제는 성능입니다. 앱의 모든 곳에서 이러한 전환이 수만 번 발생할 것이고 지연을 허용 할 수 없습니다. 그래서 마이크로 소프트의 분명한 해결책은 나에게 가장 유익 할 방법으로 직접하는 것입니다. – Giffyguy

관련 문제