2011-08-16 2 views
6

xaml에서 정수 또는 double 값을 선언 할 수 있습니다. 그러나 10 진수 값을 추가 할 수 없습니다. 그것은 확인을 구축,하지만 내가 얻을 :XAML에서 10 진수 값을 선언하는 방법?

System.Windows.Markup.XamlParseException이 : 유형 '진수'가 발견되지 했다.

다음
<UserControl.Resources> 
    <system:Int32 x:Key="AnIntValue">1000</system:Int32><!--Works!--> 
    <system:Double x:Key="ADoubleValue">1000.0</system:Double><!--Works!--> 
    <system:Decimal x:Key="ADecimalValue">1000.0</system:Decimal><!--Fails at runtime--> 
</UserControl.Resources> 

내가 시스템 네임 스페이스를 선언하고있어 방법은 다음과 같습니다 : 여기

은 XAML 코드의

xmlns:system="clr-namespace:System;assembly=mscorlib" 

편집 : 해결 방법 : 스티븐 언급 한 바와 같이,을 통해 자원을 추가 코드 숨김이 제대로 작동하는 것 같습니다.

Resources.Add("ADecimalValue", new Decimal(1000.0)); 

편집 : 응답 : WPF에서 정확히 동일한 작업을 수행하면 문제가없는 것 같습니다. 그래서 이것은 숨겨진 실버 라이트 제한이라고 생각합니다. 이 발견에 대해 스티븐에게 감사드립니다.

+0

당신이 그럴에게 어떻게입니다 xaml에서이 리소스를 사용 하시겠습니까? –

+0

바인딩에 변환기 매개 변수로 사용합니다. 정적 리소스로 참조하고 있습니다. – alf

답변

2

Decimal 형식이 UserControl 리소스 섹션의 정적 리소스로 작동하지 않는 것으로 확인되었습니다. 나는 그러나에 StackOverflow에 여기서 논의 된 몇 가지의 해결 방법을보고, 난 그냥 개인적으로 실버 라이트의 진수 유형의 작업을 확인했다고 않습니다 Access codebehind variable in XAML

이 해결 방법은 다음과 같습니다

  • 에서 리소스를 추가 코드 숨김 (위의 링크 참조)
  • "elementname"유형 바인딩을 사용하여 코드에서 속성 참조
  • 사용자의 공용 Decimal 속성에 액세스하면 데이터 컨텍스트 속성이 제어됩니다.

두 번째 해결 방법은 다음과 같이 수행 할 수 있습니다

<UserControl x:Class="SilverlightDecimal.MainPage" x:Name="root" .... > 
: 루트 UserControl을 태그 (이 아이디어는 위의 링크에서이다)과 같이 정의된다

<sdk:Label Name="label1" Content="{Binding ElementName=root, Path=DecimalProperty}" /> 

...

및이에 사용자 컨트롤의 코드 숨김 :

public decimal DecimalProperty 
{ 
    get 
    { 
     ... 
    } 
    set 
    { 
     ... 
    } 
} 
+0

감사! 첫 번째 해결 방법은 실제로 효과가있었습니다. 이제 왜 XAML에서 리소스를 선언 할 수 없는지에 대한 설명을 찾고 있습니다. – alf

+1

해결 방법이 유용했기 때문에 기쁩니다. Google은 대답이없는 것 같아 버그인지 아닌지 궁금해지기 시작했습니다. 내가 본 정보에서 Decimal 형식은 mscorlib.dll에 포함되어 있으며 Silverlight 프로젝트에서 자동으로 참조됩니다. 사전/사후 빌드 이벤트를 수행하여 dll이 빌드 출력 디렉토리에 있는지도 수동으로 확인하면 도움이되지 않습니다. –

+1

나는 맨손의 뼈대 WPF 프로젝트를 만들었고 Decimal을 정적 리소스로 완벽하게 만족시켰다. –

관련 문제