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%的时间调试它给出了这个错误,并再次尝试后,这个异常没有发生。

app.xaml资源字符串中的XamlParseException

您的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)仍然包含内部而不是公共构造函数,导致问题的错误。

相关文章:
  • 没有找到相关文章