public static IconSource?ToIconSource(this IImageSource source, IMauiContext mauiContext) { IconSource?image = null; if (source is IFileImageSource fis) { image = new BitmapIconSource { UriSource = new Uri("ms-appx:///" + fis.File) }; } else if (source is IUriImageSource uri) { image = new BitmapIconSource { UriSource = uri?.Uri }; } else if (source is IFontImageSource fontImageSource) { image = new FontIconSource { Glyph = fontImageSource.Glyph, FontSize = fontImageSource.Font.Size }; if (fontImageSource.Color != null) { image.Foreground = fontImageSource.Color.ToPlatform(); } else { image.Foreground = Colors.White.ToPlatform(); } var fontManager = mauiContext.Services.GetRequiredService <IFontManager>(); var uwpFontFamily = fontManager.GetFontFamily(fontImageSource.Font); if (!string.IsNullOrEmpty(uwpFontFamily.Source)) { ((FontIconSource)image).FontFamily = uwpFontFamily; } } return(image); }
public void InfoBadgeSupportsAllIconTypes() { InfoBadge infoBadge = null; SymbolIconSource symbolIconSource = null; PathIconSource pathIconSource = null; AnimatedIconSource animatedIconSource = null; BitmapIconSource bitmapIconSource = null; ImageIconSource imageIconSource = null; FontIconSource fontIconSource = null; RunOnUIThread.Execute(() => { infoBadge = new InfoBadge(); symbolIconSource = new SymbolIconSource(); symbolIconSource.Symbol = Symbol.Setting; fontIconSource = new FontIconSource(); fontIconSource.Glyph = "99+"; fontIconSource.FontFamily = new FontFamily("XamlAutoFontFamily"); bitmapIconSource = new BitmapIconSource(); bitmapIconSource.ShowAsMonochrome = false; Uri bitmapUri = new Uri("ms-appx:/Assets/ingredient1.png"); bitmapIconSource.UriSource = bitmapUri; imageIconSource = new ImageIconSource(); var imageUri = new Uri("https://raw.githubusercontent.com/DiemenDesign/LibreICONS/master/svg-color/libre-camera-panorama.svg"); imageIconSource.ImageSource = new SvgImageSource(imageUri); pathIconSource = new PathIconSource(); var geometry = new RectangleGeometry(); geometry.Rect = new Windows.Foundation.Rect { Width = 5, Height = 2, X = 0, Y = 0 }; pathIconSource.Data = geometry; animatedIconSource = new AnimatedIconSource(); animatedIconSource.Source = new AnimatedSettingsVisualSource(); Content = infoBadge; Content.UpdateLayout(); }); IdleSynchronizer.Wait(); RunOnUIThread.Execute(() => { Log.Comment("Switch to Symbol Icon"); infoBadge.IconSource = symbolIconSource; Content.UpdateLayout(); Log.Comment("Switch to Path Icon"); infoBadge.IconSource = pathIconSource; Content.UpdateLayout(); Log.Comment("Switch to Font Icon"); infoBadge.IconSource = fontIconSource; Content.UpdateLayout(); Log.Comment("Switch to bitmap Icon"); infoBadge.IconSource = bitmapIconSource; Content.UpdateLayout(); Log.Comment("Switch to Image Icon"); infoBadge.IconSource = imageIconSource; Content.UpdateLayout(); Log.Comment("Switch to Animated Icon"); infoBadge.IconSource = animatedIconSource; Content.UpdateLayout(); }); }