【问题标题】:Try-catch not working loading XAML resourceTry-catch 无法加载 XAML 资源
【发布时间】:2016-08-31 09:56:45
【问题描述】:

我有这些代码:

    private void btnPlanning_Click(object sender, RoutedEventArgs e)
    {
        LoadPage("PlanningView.xaml");
    }

    private void LoadPage(string APage)
    {
        try
        {
            frameMainView.Source = new Uri(APage, UriKind.Relative);
        }
        catch (Exception ex)
        {
            string errorString = $"Resource <{APage}> not found! ";
            DoLogD(errorString + " " + ex.Message);
            MessageBox.Show(errorString);
        }
    }

单击 btnPlanning 按钮,调用 LoadPage 传递一个字符串,其中包含我要在框架控件中加载的 XAML 资源的名称 frameMainView.

如果给定的资源不存在,我想捕获异常并通知用户。

问题是当我点击按钮时(并且资源不存在),无论如何我都会得到

PresentationFramework.pdb 未加载

还有一个内部System.IO.IOException告诉我资源不可用。

为什么我的 try-catch 块不起作用?

【问题讨论】:

  • 如果您在调试器中运行,您可能会遇到第一次机会异常。检查 Debug->Exceptions 并确保仅选中“User-unhandled”列。
  • 如果不是这样。尝试注释掉您的 DoLogD() 调用。也许这会在您的消息框出现之前引发异常。
  • 您最近是否更改了目标框架?请在检查目标框架后清理并重建整个解决方案。
  • 没有改变框架。 DoLogD() 调用不会引发异常(但我已在测试中将其删除)。

标签: c# wpf xaml visual-studio-2015 try-catch


【解决方案1】:

有很多方法可以将页面加载到框架中:

  1. 通过设置来源

    frameMainView.Source = new Uri("PlanningView.xaml",UriKind.RelativeOrAbsolute);

  2. 通过设置内容:

    frameMainView.Content=new PlanningView();

  3. 通过使用 NavigationService:

    frameMainView.NavigationService.Navigate(new PlanningView());

【讨论】:

  • 选项 2) 和 3) 可以解决我的问题。如果 PlanningView 不存在 -> 编译错误!这可能是一个解决方案,谢谢!
【解决方案2】:

这是一个用户界面初始化问题。您能从 Visual Studio“输出”窗口中获得更多信息吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2014-03-26
    • 2019-07-13
    相关资源
    最近更新 更多