2011-08-16 51 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" 

編輯:解決方法: 正如史蒂芬提到的,通過添加資源代碼隱藏似乎工作正常:

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

編輯:答案: 在WPF中完全一樣的東西似乎工作正常。所以我想這是一個隱藏的silverlight限制。感謝史蒂文對這一發現。

+0

你怎麼TR ying在xaml中使用這個資源? –

+0

我在轉換器參數中使用它來進行綁定。我將它稱爲靜態資源。 – alf

回答

2

我已確認您的發現,即十進制類型沒有出現在用戶控件的資源部分靜態資源工作。然而,我看到這裏已經討論了在計算器上一對夫婦的解決方法,而我剛剛親身驗證與十進制類型在Silverlight的工作:Access codebehind variable in 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 
    { 
     ... 
    } 
} 
+0

謝謝!第一個解決方法實際上起作用。現在我正在尋找關於爲什麼我無法在XAML中聲明資源的解釋。 – alf

+1

我很高興解決方法奏效。谷歌似乎沒有答案,我開始懷疑它是否是一個錯誤。根據我所看到的信息,Decimal類型包含在mscorlib.dll中,它由silverlight項目自動引用。做前期/後期構建事件來手動確保dll在構建輸出目錄中也沒有幫助。 –

+1

我做了一個簡單的WPF項目,並且十分滿意Decimal作爲一個靜態資源,這很奇怪。 –