Image.ImageFailed 事件

定义

当存在与图像检索或格式关联的错误时发生。

public:
 virtual event ExceptionRoutedEventHandler ^ ImageFailed;
// Register
event_token ImageFailed(ExceptionRoutedEventHandler const& handler) const;

// Revoke with event_token
void ImageFailed(event_token const* cookie) const;

// Revoke with event_revoker
Image::ImageFailed_revoker ImageFailed(auto_revoke_t, ExceptionRoutedEventHandler const& handler) const;
public event ExceptionRoutedEventHandler ImageFailed;
function onImageFailed(eventArgs) { /* Your code */ }
image.addEventListener("imagefailed", onImageFailed);
image.removeEventListener("imagefailed", onImageFailed);
- or -
image.onimagefailed = onImageFailed;
Public Custom Event ImageFailed As ExceptionRoutedEventHandler 
<Image ImageFailed="eventhandler"/>

事件类型

注解

发生此事件的条件包括:

  • 找不到文件
  • 无效 (无法识别或不受支持的) 文件格式
  • 上传后出现未知的文件格式解码错误
  • 由系统重新加载的限定资源 你可能能够在事件数据中使用 ErrorMessage 来确定故障的性质。

ImageFailed 和 ImageOpened 是互斥的。 每当设置或重置 ImageSource 值时,始终会触发一个事件或另一个事件。

处理 ImageFailed 的一种方案是将基础 BitmapImage 源的 UriSource 设置为不同的本地图像文件。 这可以用作要显示的回退值,而不是空白空间。 例如,如果尝试显示源可能不再存在的外部图像,或者当用户没有 Internet 连接时,可以将 UriSource 设置为引用作为应用包一部分且始终保证可用的本地回退或占位符图像。

当 Image 元素不在实时可视化树中时,Image 元素不会触发 ImageOpened 或 ImageFailed 事件。 如果需要在元素不在实时树中时接收这些事件,请使用 BitmapImage。ImageOpened/ImageFailed 事件。

private void Image_ImageFailed(object sender, ExceptionRoutedEventArgs e) {
    Image img = sender as Image;
    BitmapImage fallbackImage = new BitmapImage(new Uri("ms-appx:///Images/fallback.png"));
    img.Width = 100; //set to known width of this source's natural size
     //might instead want image to stretch to fill, depends on scenario
    img.Source = fallbackImage;
}

Windows 8 行为

对于 Windows 8,资源可以使用资源限定符模式来加载不同的资源,具体取决于特定于设备的缩放。 但是,如果在应用运行时缩放因子发生更改,则不会自动重新加载资源。 在这种情况下,应用必须处理重载资源,方法是处理 dpiChanged 事件 (或弃用的 LogicalDpiChanged 事件) ,并使用 ResourceManager API 手动重新加载适合新缩放因子的资源。 从Windows 8.1开始,如果应用运行时缩放因子发生更改,则会自动重新评估最初为应用检索的任何资源。 此外,当该资源是 Image 对象的图像源时,会触发 imageOpened 或 ImageFailed) (源加载事件之一,因为系统会请求新资源,然后将其应用到 Image。 发生运行时缩放更改的情况是,当用户将应用移动到其他监视器时,有多个监视器可用。

如果将应用代码从 Windows 8 迁移到Windows 8.1可能需要考虑此行为更改,因为它会导致在处理缩放更改时在运行时发生的 ImageOpened 或 ImageFailed 事件,即使在 XAML 中设置了 Source 的情况下也是如此。 此外,如果确实有处理 DpiChanged/LogicalDpiChanged 并重置资源的代码,则应根据新的Windows 8.1自动重载行为检查是否仍需要该代码。

对于针对 Windows 8 编译的应用,如果它在 Windows 8.1 上运行,将继续使用 Windows 8 行为。

适用于