如何在XAML中声明小数值?

alf*_*alf 6 silverlight xaml decimal

我能够在xaml中声明一个整数或双精度值.但是,我无法添加小数值.它建立好,但后来我得到:

System.Windows.Markup.XamlParseException:找不到类型"Decimal".

这是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>
Run Code Online (Sandbox Code Playgroud)

这是我如何声明系统命名空间:

xmlns:system="clr-namespace:System;assembly=mscorlib"
Run Code Online (Sandbox Code Playgroud)

编辑:解决方法: 正如史蒂文所提到的,通过代码隐藏添加资源似乎工作正常:

Resources.Add("ADecimalValue", new Decimal(1000.0));
Run Code Online (Sandbox Code Playgroud)

编辑:答案: 在WPF中做同样的事情似乎工作正常.所以我猜这是一个隐藏的银光限制.感谢Steven的这一发现.

Ste*_*ook 2

我已经确认您的发现,即 Decimal 类型似乎不能作为 UserControl 的资源部分中的静态资源工作。不过,我确实看到了 StackOverflow 上讨论过的几个解决方法,并且我刚刚亲自验证过可以在 Silverlight 中使用 Decimal 类型:Access codebehind variable in XAML

解决方法包括:

  • 从代码隐藏添加资源(请参阅上面的链接)
  • 使用“elementname”类型绑定在后面的代码中引用属性
  • 访问用户控件数据上下文属性上的公共 Decimal 属性。

第二种解决方法可以这样完成:

<sdk:Label Name="label1" Content="{Binding ElementName=root, Path=DecimalProperty}" />
Run Code Online (Sandbox Code Playgroud)

...根用户控件标签的定义如下(这个想法也来自上面的链接):

<UserControl x:Class="SilverlightDecimal.MainPage" x:Name="root" .... >
Run Code Online (Sandbox Code Playgroud)

这是在您的用户控件的代码隐藏中:

public decimal DecimalProperty
{
    get
    {
        ...
    }
    set
    {
         ...
    }
}
Run Code Online (Sandbox Code Playgroud)