显示XAML时处理丢失的图像文件

时间:2009-04-03 17:44:24

标签: c# wpf xaml

我正在使用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也可能会加载外部文件。)

我可以想到几种可能的方法:

  • 解析XAML文件以查找任何文件名,并直接检查每个文件名。
  • 显示生成的可视化树时,查找某种表明加载外部文件时出现问题的RoutedEvent

任何提示?


编辑:我认为XamlReader的东西可能会分散注意力;我正在获得一个有效的可视化树,但是在尝试加载不存在的文件时可能会出现问题。这些是我想要抓住的错误。

1 个答案:

答案 0 :(得分:0)

如果通过将图像绑定到背景对象来链接图像,则会发现WPF中的绑定错误不会引发异常。看看这个blog article which may help get around this limitation

然而,媒体元素更简单,因为它有一个事件(MediaFailed),您可以捕获它以确定它是否失败。

<MediaElement Source="filePath.wmv" MediaFailed="EventHandler"/>