Skip to main content
 首页 » 编程设计

c#之BitmapImage ImageOpened 事件未触发

2024年02月06日34bonelee

为什么在此示例中未触发 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,但如果我没有得到这个事件我就不能。

请您参考如下方法:

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(); 
    }