Как объявить десятичное значение в XAML? - PullRequest
6 голосов
/ 16 августа 2011

Я могу объявить целое или двойное значение в 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"

Редактировать: Обходной путь: Как упомянул Стивен, добавление ресурса с помощью code-behind кажетсяотлично работают:

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

Редактировать: Ответ: Делать то же самое в WPF, кажется, работает нормально.Так что я предполагаю, что это скрытое ограничение Silverlight.Спасибо Стивену за этот вывод.

1 Ответ

2 голосов
/ 16 августа 2011

Я подтвердил ваш вывод о том, что тип Decimal не работает как статический ресурс в разделе ресурсов UserControl. Однако я вижу пару обходных путей, которые обсуждались здесь в StackOverflow, и которые я только что лично проверил для работы с типом Decimal в Silverlight: Доступ к переменной codebehind в XAML

Обходные пути включают в себя:

  • добавление ресурса из кода (см. Ссылку выше)
  • Ссылка на свойство в коде с помощью привязки типа "elementname"
  • Доступ к общедоступному свойству Decimal у пользователя управляет свойством контекста данных.

Второй обходной путь можно сделать так:

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

... где корневой тег usercontrol определяется следующим образом (эта идея также взята из ссылки выше):

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

и это в коде вашего пользовательского элемента управления:

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