如何在XAML中声明一个十进制数值?

6

我可以在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>

这是我声明系统命名空间的方式:
xmlns:system="clr-namespace:System;assembly=mscorlib"

编辑:解决方法: 正如Steven所提到的,通过代码添加资源似乎可以正常工作:

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

编辑:回答: 在WPF中完全按照同样的方式操作似乎可以正常工作。因此,我认为这是Silverlight的一个隐藏限制。感谢Steven发现了这一点。


你在 XAML 中尝试如何使用这个资源? - Steven Magana-Zook
我在绑定的转换器参数中使用它。我将其作为静态资源引用。 - alf
1个回答

2
我已经确认了你的发现,即在用户控件资源部分中,十进制类型似乎不能作为静态资源使用。然而,我在StackOverflow上看到了一些解决方法,并且我刚刚亲自验证了这些方法可以在Silverlight中使用Decimal类型:访问XAML中的code-behind变量
这些解决方法包括:
  • 从代码后台添加资源(参见上面的链接)
  • 使用“elementname”类型绑定引用代码后台中的属性
  • 访问用户控件数据上下文属性中的公共Decimal属性。
第二个解决方法可以像这样实现:
<sdk:Label Name="label1" Content="{Binding ElementName=root, Path=DecimalProperty}" />

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

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

这是您用户控件的代码后台内容:

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

谢谢!第一个解决方法真的起作用了。现在我正在寻找为什么我不能在XAML中声明资源的解释。 - alf
1
我很高兴解决方法起作用了。Google似乎没有答案,我开始怀疑这是一个bug。根据我所看到的信息,类型Decimal包含在mscorlib.dll中,该文件会自动被Silverlight项目引用。尝试预/后构建事件手动确保该DLL位于生成输出目录中也没有帮助。 - Steven Magana-Zook
1
我创建了一个简单的 WPF 项目,并且它完全可以使用 Decimal 作为静态资源,这很奇怪。 - Steven Magana-Zook
啊,这可能是一个隐藏的Silverlight限制,意味着我的XAML没问题。知道这点真好! - alf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接