BitmapImage ImageOpened事件未触发

本文关键字:事件 ImageOpened BitmapImage | 更新日期: 2023-09-27 18:08:37

为什么在这个例子中ImageOpened事件没有被触发?我在Win8的WinRT应用程序中使用它。

BitmapImage myImage = new BitmapImage();        
myImage.ImageOpened += myImage_ImageOpened;
myImage.UriSource = new Uri("ms-appx:/Assets/Image.png");

private void myImage_ImageOpened(object sender, RoutedEventArgs e)
{
    int pixelHeight = (sender as BitmapImage).PixelHeight;
}

我的问题是ImageOpened事件没有被触发。我想检查图像的PixelHeight和PixelWidth但是如果没有这个事件我就不能检查

BitmapImage ImageOpened事件未触发

WinRT有延迟加载行为。图像不会被加载,除非你实际显示它。如果你真的需要强制加载来执行一些布局调整,你可以使用这种方法来强制加载:

 private async void Download()
    {
        Windows.UI.Xaml.Media.Imaging.BitmapImage image = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
        image.ImageFailed += image_ImageFailed;
        image.ImageOpened += image_ImageOpened;
        var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Logo.scale-100.png", UriKind.Absolute));
        var stream = await file.OpenStreamForReadAsync();
        await image.SetSourceAsync(stream.AsRandomAccessStream());
    }
    void image_ImageFailed(object sender, ExceptionRoutedEventArgs e)
    {
        MessageDialog dg = new MessageDialog("Image Failed");
        dg.ShowAsync();
    }
    void image_ImageOpened(object sender, RoutedEventArgs e)
    {
        MessageDialog dg = new MessageDialog("Image Opened");
        dg.ShowAsync();
    }