WPF XAML解析异常错误发生?

7
 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            x:Class="AFICController.EULA"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:res="clr-namespace:AFICController.Resources"
            Title="{x:Static res:Strings.WizardWelcomeWindow_Title}"
            Width="800"
            Height="600"  
            WindowStartupLocation="CenterScreen"
            Icon="/AFICController;Component/Resources/Images/att_icon.ico"
            ResizeMode="NoResize">

我正在开发一款 C# WPF 应用程序,使用 MVVM 架构实现。应用程序在启动时显示了闪屏,看起来正常,但之后我希望出现 EULA(最终用户许可协议)窗口,但执行时出现了异常:“XAML 解析异常”“Provide value on 'System.Windows.Markup.StaticExtension' threw an exception”,并指向上面的代码。

以下是我的 C# 代码,用于调用 EULA。请帮帮我,因为我已经尝试过所有方法来消除这个异常。

class App : Application
{
[STAThread()]
static void Main()
{
  Splasher.Splash = new SplashScreen();
  Splasher.ShowSplash();

  Mouse.OverrideCursor = null;

  for (int i = 0; i < 5000; i++)
  {
    Thread.Sleep(1);
  }

  Splasher.CloseSplash();
  new App();
}
/// <summary>
/// 
/// </summary>
public App()
{

  App.Current.Resources.MergedDictionaries.Add(new ResourceDictionary { Source = new       Uri(@"\Resources\Dictionary\ATTColors.xaml", UriKind.Relative) });

  App.Current.Resources.MergedDictionaries.Add(new ResourceDictionary { Source = new Uri(@"\Resources\Dictionary\AppButton.xaml", UriKind.Relative) });

  Console.WriteLine("EULA Opened");
  StartupUri = new System.Uri("EULA.xaml", UriKind.Relative);

  //StartupUri = new System.Uri("View/WizardDialog.xaml", UriKind.Relative);


  Run();
}
1个回答

35

根据您的错误:

"XAML解析异常:'System.Windows.Markup.StaticExtension'上的提供值引发了异常"

我认为问题出在这一行:

Title="{x:Static res:Strings.WizardWelcomeWindow_Title}"

这是使用StaticExtension的地方。

确保您的Strings.resx是公共的,通过转到其属性并检查自定义工具是否设置为PublicResXFileCodeGenerator(而不是默认的ResXFileCodeGenerator) - 您可以直接在那里编辑它,也可以通过设计器中打开资源文件时的访问修改组合框间接编辑。


但它生成了另一个错误,如下所示:“与指定绑定约束匹配的类型'AFICController.EULA'上的构造函数调用引发了异常。” - TheSpy
有人对此有想法吗? - TheSpy
你应该调试 AFICController.EULA 窗口的构造函数。异常可能会提供更多信息。如果你无法解决问题,我建议你发布一个新的问题,包括相关的代码和异常信息。 - jnovo
或者,当在设计器中打开*.resx文件时,您可以将“访问修饰符”更改为“公共”,这具有相同的效果,但(至少对我来说)涉及较少的“魔法”。 - sluki
@sluki 真不敢相信我居然错过了那个。马上编辑答案,感谢提醒。 - jnovo
1
你救了我们的一天。谢谢你。 - James Westgate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接