2013-01-15 78 views
2

我在App.xaml中下面的代碼:XamlParseException在App.xaml中的資源字符串

<Application x:Class="PcgTools.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:PcgTools.ViewModels" 
     xmlns:res="clr-namespace:PcgTools.Resources" 
     StartupUri="MainWindow.xaml" 
     Startup="Application_Startup"> 
    <Application.Resources> 
     <ResourceDictionary> 
      ... 
      <res:Strings x:Key="LocStrings"/> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

(該是...我取出,使清潔例如一些線路)。

當我運行的應用程序,我得到以下錯誤(試圖運行/調試後直接): (來自荷蘭的平移,可能不是100%字面上相等):

目前還沒有找到一個匹配類型PcgTools.Resources.Strings中的構造函數。您可以使用指令Arguments或FactoryMethod來創建此類型。

有文件Strings.Designer.cs構造:

namespace PcgTools.Resources { 
... 
public class Strings { 
... 

[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute 
    ("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 
internal Strings() { 
    } 

然而,它產生的,所以我甚至不能改變它。

順便說一句,沒有改變代碼已經工作(大約一個星期前),但接着大約30%的時候調試它給出了這個錯誤,再次嘗試後,這種異常沒有發生。

回答

2

PcgTools.Resources.Strings類有一個公共的默認構造函數嗎?我認爲這是抱怨,它不能創建對象,因爲它找不到匹配的構造函數,並且因爲你沒有使用Arguments,它正在尋找一個默認的構造函數(沒有參數的構造函數)。構造函數需要公開,而不是內部或私人。

由於代碼已生成,因此您需要找到解決方法。使用FactoryMethods的東西可能會起作用。要做到這一點,建立像

namespace PcgTools.Resources 
{ 
    public static class StringResourceHelper 
    { 
     public static strings GetStringResources() 
     { 
      return new Resources.Strings(); 
     } 
    } 
} 

另一個類,然後在你的XAML可以這樣做:

<res:Strings x:FactoryMethod="res:StringResourceHelper.GetStringResources" 
      x:Key="LocStrings"/> 
+0

是的,它有一個默認的構造函數...我已經將它添加到問題中。 –

+0

它也必須公開。最初我應該在我的回答中說。我已經更新了我的回答。 – Tim

+0

我已經提出並添加了一個示例,說明如何自動生成代碼以解決此問題。 – Tim

0

參見:

http://dotnet.dzone.com/news/did-you-know-silverlight-class

簡而言之:不命名命名空間.Resources 它不應該被命名爲Resources但是其他的東西,否則你將會得到如上所述的錯誤。

編輯:但是,似乎更改資源字符串後,被覆蓋的文件(..Designer.cs)仍然包含內部而不是公共構造函數導致問題的錯誤。