我正在使用XamlReader.Load()加载外部XAML文件,该文件可能包含一些图像和其他媒体。
我正在使用ParserContext来设置baseUri,所以如果XAML文件中的路径正确,则媒体加载成功。
// works
var pc = new ParserContext();
pc.BaseUri = new Uri(baseUri, UriKind.RelativeOrAbsolute);
using (FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read))
return XamlReader.Load(stream, pc);
有没有办法让我弄清楚哪些媒体文件无法加载?也就是说,如果XAML文件包含一个Image标签,其源设置为不存在的路径,我可以在运行时告知图像没有正确显示吗? (图像将是最常见的,但其他控件如MediaElement也可能会加载外部文件。)
我可以想到几种可能的方法:
任何提示?
编辑:我认为XamlReader的东西可能会分散注意力;我正在获得一个有效的可视化树,但是在尝试加载不存在的文件时可能会出现问题。这些是我想要抓住的错误。
答案 0 :(得分:0)
如果通过将图像绑定到背景对象来链接图像,则会发现WPF中的绑定错误不会引发异常。看看这个blog article which may help get around this limitation。
然而,媒体元素更简单,因为它有一个事件(MediaFailed
),您可以捕获它以确定它是否失败。
<MediaElement Source="filePath.wmv" MediaFailed="EventHandler"/>