public static async Task UpdateSource(IImageVisualElementRenderer renderer) { var Element = renderer.Element; var Control = renderer.GetNativeElement(); var imageElement = Element as IImageElement; if (renderer.IsDisposed || Element == null || Control == null) { return; } ImageSource placeholderError = null; if (imageElement is Image img) { placeholderError = img.ErrorPlaceholder; var source = await img.LoadingPlaceholder.ToWindowsImageSourceAsync(); renderer.SetImage(source); } var imageController = Element as IImageController; imageController?.SetIsLoading(true); try { var imagesource = await imageElement.Source.ToWindowsImageSourceAsync(); if (renderer.IsDisposed) { return; } if (imagesource is BitmapImage bitmapImage && _nativeAnimationSupport) { bitmapImage.AutoPlay = false; } if (Control != null) { renderer.SetImage(imagesource); } RefreshImage(renderer); // The ImageFailed event don't trigger when the local ImageSource is invalid, so we need to check the size. var size = renderer.GetDesiredSize(double.PositiveInfinity, double.PositiveInfinity); if (size.Request.IsZero && imageElement is Image) { imagesource = await placeholderError.ToWindowsImageSourceAsync(); renderer.SetImage(imagesource); } } finally { imageController?.SetIsLoading(false); } }
public static async Task UpdateSource(IImageVisualElementRenderer renderer) { var Element = renderer.Element; var Control = renderer.GetNativeElement(); var imageElement = Element as IImageElement; if (renderer.IsDisposed || Element == null || Control == null) { return; } if (imageElement is Image img) { var source = await img.LoadingPlaceholder.ToWindowsImageSourceAsync(); renderer.SetImage(source); } var imageController = Element as IImageController; imageController?.SetIsLoading(true); try { // If it's a url image source and ToWindowsImageSourceAsync returns null, that was an error var imagesource = await imageElement.Source.ToWindowsImageSourceAsync(); if (imageElement.Source is UriImageSource && imagesource == null) { await DisplayErrorImage(renderer); return; } if (renderer.IsDisposed) { return; } if (imagesource is BitmapImage bitmapImage && _nativeAnimationSupport) { bitmapImage.AutoPlay = false; } if (Control != null) { renderer.SetImage(imagesource); } RefreshImage(renderer); } finally { imageController?.SetIsLoading(false); } }
public static async Task UpdateSource(IImageVisualElementRenderer renderer) { var Element = renderer.Element; var Control = renderer.GetNativeElement(); var imageElement = Element as IImageElement; if (renderer.IsDisposed || Element == null || Control == null) { return; } var imageController = Element as IImageController; imageController?.SetIsLoading(true); ImageSource source = imageElement.Source; IImageSourceHandler handler; if (source != null && (handler = Registrar.Registered.GetHandlerForObject <IImageSourceHandler>(source)) != null) { Windows.UI.Xaml.Media.ImageSource imagesource; try { imagesource = await handler.LoadImageAsync(source); } catch (OperationCanceledException) { imagesource = null; } // In the time it takes to await the imagesource, some zippy little app // might have disposed of this Image already. if (Control != null) { renderer.SetImage(imagesource); } RefreshImage(imageElement as IViewController); } else { renderer.SetImage(null); imageController?.SetIsLoading(false); } }
public static async Task UpdateSource(IImageVisualElementRenderer renderer) { var Element = renderer.Element; var Control = renderer.GetNativeElement(); var imageElement = Element as IImageElement; if (renderer.IsDisposed || Element == null || Control == null) { return; } var imageController = Element as IImageController; imageController?.SetIsLoading(true); try { var imagesource = await imageElement.Source.ToWindowsImageSourceAsync(); if (renderer.IsDisposed) { return; } if (imagesource is BitmapImage bitmapImage && _nativeAnimationSupport) { bitmapImage.AutoPlay = false; } if (Control != null) { renderer.SetImage(imagesource); } RefreshImage(renderer); } finally { imageController?.SetIsLoading(false); } }
public static void UpdateAspect(IImageVisualElementRenderer renderer, IImageElement controller) { var Element = renderer.Element; var Control = renderer.GetNativeElement(); var image = renderer.GetImage(); if (renderer.IsDisposed || Element == null || Control == null) { return; } image.Stretch = GetStretch(controller.Aspect); if (controller.Aspect == Aspect.AspectFill || controller.Aspect == Aspect.AspectFit) { image.HorizontalAlignment = HorizontalAlignment.Center; image.VerticalAlignment = VerticalAlignment.Center; } else { image.HorizontalAlignment = HorizontalAlignment.Left; image.VerticalAlignment = VerticalAlignment.Top; } }