我还没有在Stackoverflow上找到解决方案。如果已经有,请告诉我。但首先尝试我的代码。我知道解决了非常相似但不相等的问题。
我有一个尝试在WPF中加载ResourceDictionary的方法。我想要做的是处理2种类型的异常并抛出我自己更有意义和特定的异常,因为我知道问题是什么。
现在我有一种非常奇怪的行为。当我调试代码。一切似乎都很好。但当我按f5继续Visual Studio告诉我,Exceptiontype XamlParseException
未处理。但我处理了这个例外。应该处理的异常是ThemeNotFoundException
。任何人都可以解释这里发生的事情。不幸的是,我不太了解WPF如何处理异常。
这是我的CodeSnippet:
private static ResourceDictionary LoadResourceDictionary(Uri newThemesUri)
{
try
{
return new ResourceDictionary { Source = newThemesUri };
}
catch (XamlParseException xamlEx)
{
throw new ThemeNotFoundException(newThemesUri, xamlEx);
}
catch (IOException ioEx)
{
throw new ThemeNotFoundException(newThemesUri, ioEx);
}
}
答案 0 :(得分:2)
这是因为调用LoadResourceDictionary
的代码由WPF代码包装,后者为某些可视元素(窗口,用户控件等)加载XAML。
因此,完整的异常流程如下所示:
XamlParseException
或IOException
LoadResourceDictionary
(已处理)
{li} ThemeNotFoundException
LoadResourceDictionary
(已处理)
WPF代码中的XamlParseException
(未处理)。实际上,WPF代码包含类似LoadResourceDictionary
的内容:
catch (Exception ex)
{
throw new XamlParseException("...", ex);
}
答案 1 :(得分:0)
看起来你所看到的XamlParseException
稍后会在代码中抛出,可能是在某些视图或UserControl的某些InitializeComponent
中...尝试在view / UserControl构造函数中设置断点并检查它是否在那里扔。如果是,您可以尝试将InitializeComponent调用包装在try / catch中。
public partial class MainWindow : Window
{
public MainWindow()
{
try
{
InitializeComponent();
}
catch (XamlParseException xamlEx)
{
throw new ThemeNotFoundException(newThemesUri, xamlEx);
}
catch (IOException ioEx)
{
throw new ThemeNotFoundException(newThemesUri, ioEx);
}
}
}