2011-08-16 13 views
6

Puedo declarar un valor entero o doble en xaml. Sin embargo, no puedo agregar un valor decimal. Se construye bien, pero cuando me siento:¿Cómo declarar un valor decimal en XAML?

System.Windows.Markup.XamlParseException: no Se encontró que el tipo de 'decimal'.

Aquí está el código XAML:

<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> 

Así es como estoy declarando el espacio de nombres del sistema:

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

Editar: Solución: Como Steven mencionó, añadiendo el recurso a través código detrás parece funcionar bien:

Editar: Respuesta: Hacer exactamente lo mismo en WPF parece funcionar bien. Así que supongo que esta es una restricción Silverlight oculta. Gracias a Steven por este hallazgo.

+0

Cómo estás tr ying para usar este recurso en el xaml? –

+0

Lo uso en un parámetro de convertidor para un enlace. Lo estoy haciendo referencia como un recurso estático. – alf

Respuesta

2

He confirmado su hallazgo de que el tipo Decimal no parece funcionar como un recurso estático en la sección de recursos de UserControl. sin embargo yo veo un par de soluciones que se han discutido aquí en StackOverflow, y que he acaba personalmente verificado el funcionamiento con el tipo decimal en Silverlight: Access codebehind variable in XAML

Las soluciones incluyen:

  • agregar el recurso de el código subyacente (ver el enlace de arriba)
  • Hacer referencia a una propiedad en el código detrás de usar un enlace de tipo "nombre de elemento"
  • Acceder a una propiedad Decimal pública en la propiedad de contexto de datos de control de usuario.

La segunda solución se puede hacer así:

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

... donde la etiqueta usercontrol raíz se define como esto (esta idea es desde el enlace de arriba también):

<UserControl x:Class="SilverlightDecimal.MainPage" x:Name="root" .... > 

y esto es en el control de usuario de código subyacente:

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

¡Gracias! La primera solución realmente funcionó. Ahora estoy buscando una explicación sobre por qué no puedo declarar el recurso en XAML. – alf

+1

Me alegro de que la solución haya funcionado. Google parece no tener la respuesta y estoy empezando a preguntarme si es un error. A partir de la información que he visto, el tipo Decimal está contenido en mscorlib.dll al que hacen referencia automáticamente los proyectos de silverlight. Hacer eventos de compilación pre/post para asegurarse manualmente de que dll estaba en el directorio de salida de compilación tampoco ayudó. –

+1

Hice un proyecto básico de WPF y estaba perfectamente contento con Decimal como recurso estático, qué extraño. –

Cuestiones relacionadas