2011-08-16 5 views
6

Я могу объявить целое или двойное значение в xaml. Однако я не могу добавить десятичное значение. Он строит хорошо, но затем я получаю:Как объявить десятичное значение в 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" 

Edit: Обход: Как упоминалось Стивен, добавление ресурса через код-по-видимому, работает нормально:

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

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

+0

Как вы TR ying использовать этот ресурс в xaml? –

+0

Я использую его в параметре конвертера для привязки. Я ссылаюсь на него как на статический ресурс. – alf

ответ

2

Я подтвердил, что тип десятичного разряда не работает как статический ресурс в разделе ресурсов UserControl. Однако я вижу пару обходных путей, которые были обсуждены здесь, на StackOverflow, и что я только что лично проверить работу с десятичным типом в Silverlight: Access codebehind variable in 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 
    { 
     ... 
    } 
} 
+0

Спасибо! Первый обходной путь действительно работал. Теперь я ищу объяснение, почему я не могу объявить ресурс в XAML. – alf

+1

Я рад, что обходной путь работал. У Google, похоже, нет ответа, и я начинаю задаваться вопросом, является ли это ошибкой. Из информации, которую я видел, тип Decimal содержится в файле mscorlib.dll, который автоматически ссылается на проекты silverlight. Выполнение событий pre/post build вручную, чтобы убедиться, что dll было в каталоге вывода сборки, также не помогло. –

+1

Я сделал проект WPF с голубыми костями, и он был совершенно доволен Decimal как статическим ресурсом, как странно. –

Смежные вопросы