xabre / xamarin-forms-tab-badge

Xamarin Forms bindable Tab badges for iOS, Android, UWP, MacOS and WPF
MIT License
307 stars 75 forks source link

[Bug] UWP : Tab icons not showing #96

Open mhrastegari opened 4 years ago

mhrastegari commented 4 years ago

when i set renderer([assembly: ExportRenderer(typeof(TabbedPage), typeof(BadgedTabbedPageRenderer))]) in AssemblyInfo.cs, my tab icons and titles not showing anymore on UWP.

craigwi commented 3 years ago

I had the same problem and discovered that:

  1. the converter used to process the icon is limited; I could get an icon to show using a png in the old location for UWP (same directory as App.xaml).
  2. if you do provide an icon, the title will not show; it is an either or thing on UWP.
craigwi commented 3 years ago

On the first point, the UWP TabIconConverter probably needs to allow resource:// to pass through and not get pre-pended with ms-appx:///.

craigwi commented 3 years ago

Resource:// is an FFImageLoading convention. To make this work one needs to pick a convention for how to extract the assembly name from the source string and then call GetManifestResourceStream on that assembly. I tried two methods, both of which worked. The simplest is to assume that the full resource name is ".Resources." and then load the assembly using the . Another way is like FFImageLoading by looking for "?assembly=" in the source string and loading the assembly based on that. See EmbeddedResourceResolver.cs in FFImageloading.

craigwi commented 3 years ago

In the end I moved the tab icons to the OS-specific asset location for two reasons:

  1. avoid this issue
  2. on iOS and Android, be able to specify different resolutions of the icons (which I didn't do otherwise).

I also discovered, FWIW, that in the case where the tabbed pages are NavigationPage with children (CreateTabedPageWithNavigationPageChildren() in the demo) one actually does have to set the Title and IconImageSource on BOTH the navigation page and the child (e.g., Tab1) which becomes the root of the NavigationPage. If not, then various cases don't work (e.g., badges don't show up at first on iOS).