2014-06-15 151 views
1

爲什麼在此示例中,ImageOpened事件未被觸發?我正在使用WinRT的WinRT應用程序。BitmapImage ImageOpened事件未觸發

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,但如果我沒有收到這個事件,我不能。

回答

4

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

謝謝。工作正常 :) – user2025830