app.xaml资源字符串中的XamlParseException
本文关键字:XamlParseException 字符串 xaml 资源 app | 更新日期: 2023-09-27 17:53:17
我有以下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>
(…我删除了一些行,使示例更干净)。
当我运行应用程序时,我得到以下错误(直接在尝试运行/debug之后):(翻译自荷兰语,所以可能不是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
类有一个公共默认构造函数吗?我认为它在抱怨它不能创建对象,因为它找不到一个匹配的构造函数,因为你没有使用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"/>
参见:
http://dotnet.dzone.com/news/did-you-know-silverlight-class简而言之:不要将命名空间命名为.Resources它不应该被命名为Resources,而应该是其他名字,否则你会得到如上所述的错误。
编辑:然而,似乎在改变资源字符串后,被覆盖的文件(..Designer.cs)仍然包含内部而不是公共构造函数,导致问题的错误。