【问题标题】:How to declare a decimal value in XAML?如何在 XAML 中声明十进制值?
【发布时间】:2011-08-18 04:13:29
【问题描述】:

我可以在 xaml 中声明一个整数或双精度值。但是,我无法添加十进制值。它构建正常,但随后我得到:

System.Windows.Markup.XamlParseException:“十进制”类型不是 找到了。

这是 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 中做同样的事情似乎工作正常。所以我想这是一个隐藏的银光限制。感谢 Steven 的发现。

【问题讨论】:

  • 您如何尝试在 xaml 中使用此资源?
  • 我在转换器参数中使用它进行绑定。我将其称为静态资源。

标签: silverlight xaml decimal


【解决方案1】:

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

解决方法包括:

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

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

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

...root usercontrol 标签是这样定义的(这个想法也来自上面的链接):

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

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

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

【讨论】:

  • 谢谢!第一个解决方法确实有效。现在我正在寻找关于为什么我不能在 XAML 中声明资源的解释。
  • 我很高兴解决方法奏效了。谷歌似乎没有答案,我开始怀疑这是否是一个错误。从我看到的信息来看,Decimal 类型包含在 mscorlib.dll 中,silverlight 项目会自动引用它。执行构建前/构建后事件以手动确保 dll 在构建输出目录中也无济于事。
  • 我做了一个简单的 WPF 项目,它非常满意 Decimal 作为静态资源,多么奇怪。
  • 啊,所以这可能是一个隐藏的 silverlight 限制,这意味着我的 xaml 没问题。很高兴知道!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 2015-05-22
相关资源
最近更新 更多