我在 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% 的时间会出现此错误,并且在重试后并没有发生此异常。
最佳答案
您的 PcgTools.Resources.Strings
类是否有公共(public)默认构造函数?我认为它提示它无法创建对象,因为它找不到匹配的构造函数,并且由于您没有使用 Arguments
,它正在寻找一个默认构造函数(没有参数的构造函数)。构造函数必须是公共(public)的,而不是内部的或私有(private)的。
由于代码已生成,您需要找到解决此问题的方法。使用 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"/>
关于c# - app.xaml 资源字符串中的 XamlParseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14346244/