Событие BitmapImage ImageOpened не запущено
Почему в этом примере событие ImageOpened не сработало? Я использую его в приложении WinRT для Win8.
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 изображения, но не могу, если не получу это событие.
1 ответ
Решение
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();
}