c# - app.xaml 资源字符串中的 XamlParseException

标签 c# wpf string xaml resources

我在 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/

相关文章:

c# - RibbonDropDown 丢失项目

c# - 将条件参数传递给 Database.SqlQuery

c# - 双击发生时防止单击 WPF 控件

c# - 在功能区 UI 中切换选项卡

c# - 如何使用只读属性通知 UI 更改?

c# - 将字符串编码为 base-64 或从 base-64 编码

c# - 并发读取/写入 Redis 集 - 单服务器多客户端

c# - 如何在 wpf datagrid 中绑定(bind)行标题?

c - C-如何解析反斜杠字符

java - Java 字符串中的 Null\u0000?