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

发布于 2024-11-30 00:22:06 字数 888 浏览 0 评论 0原文

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

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

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

编辑:答案: 在 WPF 中执行完全相同的操作似乎效果很好。所以我猜这是一个隐藏的 silverlight 限制。感谢史蒂文的这一发现。

I'm able to declare an integer or double value in xaml. However, I can't add a decimal value. It builds ok, but then I get:

System.Windows.Markup.XamlParseException: The type 'Decimal' was not
found.

Here's the xaml code:

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

Here's how I'm declaring the system namespace:

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

Edit: Workaround:
As Steven mentioned, adding the resource through code-behind seems to work fine:

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

Edit: Answer:
Doing exactly the same thing in WPF seems to work fine. So I guess this is a hidden silverlight restriction. Thanks to Steven for this finding.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

禾厶谷欠 2024-12-07 00:22:06

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

解决方法包括:

  • 从代码隐藏中添加资源(请参阅上面的链接)
  • 引用代码中的属性使用“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
    {
         ...
    }
}

I have confirmed your finding that the Decimal type does not appear to work as a static resource in a UserControl's resources section. I do however see a couple workarounds that have been discussed here on StackOverflow, and that i have just personally verified to work with the Decimal type in Silverlight: Access codebehind variable in XAML

The workarounds include:

  • adding the resource from the code-behind (see the link above)
  • Referencing a property in the code behind using an "elementname" type binding
  • Accessing a public Decimal property on the user controls data context property.

The second workaround can be done like this:

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

...where the root usercontrol tag is defined like this (this idea is from the link above also):

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

and this is in your user control's code-behind:

public decimal DecimalProperty
{
    get
    {
        ...
    }
    set
    {
         ...
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文