Forms9Patch 2.4.9-beta1

This is a prerelease version of Forms9Patch.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Forms9Patch --version 2.4.9-beta1                
NuGet\Install-Package Forms9Patch -Version 2.4.9-beta1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Forms9Patch" Version="2.4.9-beta1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Forms9Patch --version 2.4.9-beta1                
#r "nuget: Forms9Patch, 2.4.9-beta1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Forms9Patch as a Cake Addin
#addin nuget:?package=Forms9Patch&version=2.4.9-beta1&prerelease

// Install Forms9Patch as a Cake Tool
#tool nuget:?package=Forms9Patch&version=2.4.9-beta1&prerelease                

Xamarin Forms is great for developing apps on Android, iOS, and Universal Windows Platform (UWP) but it is missing some important features:
- Scalable images
- NetStandard, PCL and Shared Library, multi-screen / multi-resolution image management
- HTML formatted text for labels and buttons
- NetStandard, PCL and Shared Library custom font management
- Hardware keyboard key detection
- On-Screen software keyboard height change events
- Support for multiple items of the same MIME type on the clipboard
- Support for inter-app Data Sharing

Android developers can use NinePatch bitmaps, the drawable directory naming convention, Html.FromHtml, and a bunch of complex file manipulations to address the image issue.  Likewise, iOS developers can use ResizeableImageWithCapInsets, the @2x, @3x, @4x file naming convention, and some 3rd party libraries for this purpose.  Forms9Patch enhances Xamarin Forms to make multi-resolution / multi-screen image management, custom fonts, and HTML text formatting easy for NetStandard, PCL, and Shared Libary apps for iOS,  Android and UWP

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed.  monoandroid10 is compatible. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Universal Windows Platform uap was computed.  uap10 is compatible.  uap10.0 is compatible. 
Xamarin.iOS xamarinios was computed.  xamarinios10 is compatible. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on Forms9Patch:

Package Downloads
EltraXamCommon

Eltra - CANOpen based IoT Framework - SDK - Xamarin UI

Plugin.Xamarin.Tools

Set of several tools and dependency services for xamarin

EnigmatiKreations.Framework.Controls

Package Description

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on Forms9Patch:

Repository Stars
baskren/Forms9Patch
Simplify image management and text formatting in your Xamarin.Forms apps
Version Downloads Last updated
2.4.9 153,119 12/16/2020 2.4.9 is deprecated because it is no longer maintained.
2.4.9-beta2 1,476 12/16/2020
2.4.9-beta1 1,606 12/15/2020
2.4.8 12,581 11/28/2020
2.4.7 5,439 11/19/2020
2.4.6 9,326 9/18/2020
2.4.5 1,837 9/17/2020
2.4.4 1,840 9/17/2020
2.4.2 9,168 7/25/2020
2.4.1 2,367 7/25/2020
2.4.0 2,170 7/24/2020
2.4.0-beta2 1,354 7/24/2020
2.4.0-beta1 1,365 7/24/2020
2.3.0 13,747 6/29/2020
2.2.6 20,690 3/15/2020
2.2.5 2,604 3/14/2020
2.2.5-beta1 1,349 3/14/2020
2.2.4 9,018 1/28/2020
2.2.4-beta1 1,451 1/23/2020
2.2.3 3,923 1/4/2020
2.2.3-pre1 2,416 1/4/2020
2.2.2 2,417 12/31/2019
2.2.1 2,101 12/30/2019
2.2.0 1,974 12/26/2019
2.1.3 3,155 12/10/2019
2.1.2 4,324 11/27/2019
2.1.1 1,707 11/26/2019
2.1.0 1,729 11/26/2019
2.1.0-beta1 1,402 11/22/2019
2.0.2 2,520 11/13/2019
2.0.1 1,840 11/12/2019
2.0.0 9,076 11/11/2019
2.0.0-rc1 1,387 11/11/2019
1.8.1 4,430 9/17/2019
1.8.0.5 3,196 8/15/2019
1.8.0.4 2,769 7/26/2019
1.8.0.2 3,054 7/9/2019
1.8.0.1 2,408 7/5/2019
1.8.0 3,062 6/26/2019
1.7.0 13,650 4/22/2019
1.6.7.2 5,281 4/12/2019
1.6.7.1 2,463 4/11/2019
1.6.7 2,254 4/11/2019
1.6.6.2 2,826 4/7/2019
1.6.6.1 3,061 3/22/2019
1.6.6 8,393 3/2/2019
1.6.5.1 2,675 2/6/2019
1.6.5.1-rc2 2,127 2/1/2019
1.6.5.1-rc1 2,067 1/30/2019
1.6.5 2,765 1/28/2019
1.6.4 20,109 12/5/2018
1.6.3 11,031 11/25/2018
1.6.2.1 4,380 11/16/2018
1.6.2 2,694 11/15/2018
1.6.1 2,721 11/2/2018
1.6.0.1 2,440 10/30/2018
1.6.0-rc5 2,254 10/30/2018
1.6.0-rc4 2,155 10/30/2018
1.6.0-rc3 2,135 10/29/2018
1.6.0-rc2 2,222 10/27/2018
1.6.0-rc1 2,191 10/27/2018
1.5.0.9 11,180 10/23/2018
1.5.0.9-beta1 2,360 10/22/2018
1.5.0.8 2,502 10/22/2018
1.5.0.7-rc1 2,261 10/20/2018
1.5.0.6 2,670 10/12/2018
1.5.0.5 2,626 10/12/2018
1.5.0-rc1 2,232 10/9/2018
1.4.0.3 3,258 9/7/2018
1.4.0.2 2,723 9/7/2018
1.4.0.1 2,557 9/7/2018
1.4.0 2,599 9/5/2018
1.3.3 6,315 6/28/2018
1.3.2 4,817 6/19/2018
1.3.1 3,136 5/15/2018
1.3.0 3,065 5/11/2018
1.2.0.3 3,127 4/19/2018
1.2.0 2,655 4/17/2018
1.1.1 3,065 2/19/2018
1.1.0 3,045 1/6/2018
1.0.1.3 2,662 1/5/2018
1.0.1.2 2,943 1/4/2018
1.0.1.1 3,200 1/2/2018
1.0.0 2,788 12/28/2017
0.10.3.5 11,317 10/26/2017
0.10.3.4 4,054 10/7/2017
0.10.3.3 6,577 8/14/2017
0.10.3.2 2,736 8/2/2017
0.10.3.1 2,790 7/10/2017
0.10.3 2,708 6/27/2017
0.10.2.16 2,643 6/21/2017
0.10.2.13 2,842 5/30/2017
0.10.2.12 2,663 5/23/2017
0.10.2.11 2,841 5/10/2017
0.10.2.10 2,717 5/3/2017
0.10.2.9 2,629 5/3/2017
0.10.2.8 2,670 5/3/2017
0.10.2.7 2,724 5/1/2017
0.10.2.6 3,031 4/16/2017
0.10.2.5 2,634 4/16/2017
0.10.2.4 2,734 4/10/2017
0.10.2.3 2,750 3/28/2017
0.10.2.2 3,374 3/2/2017
0.10.2.1 3,202 2/22/2017
0.10.1 2,854 2/16/2017
0.10.0.1 2,850 2/13/2017
0.10.0 2,758 2/11/2017
0.9.13.5 4,904 10/13/2016
0.9.13.4 3,108 9/26/2016
0.9.13.3 2,997 9/21/2016
0.9.13.2 2,768 9/15/2016
0.9.13.1 2,677 9/1/2016
0.9.13 2,786 8/22/2016
0.9.12.5 2,661 8/17/2016
0.9.12.4 2,879 8/6/2016
0.9.12.3 2,875 7/19/2016
0.9.12.2 3,020 7/16/2016
0.9.12.1 2,785 7/13/2016
0.9.12 2,861 7/11/2016
0.9.11.2 2,740 6/27/2016
0.9.11.1 2,910 5/10/2016
0.9.11 2,901 5/5/2016
0.9.10.7 2,844 4/29/2016
0.9.10.6 2,645 4/12/2016
0.9.10.5 2,726 4/5/2016
0.9.10.4 2,580 3/31/2016
0.9.10.3 2,707 3/23/2016
0.9.10.2 2,825 3/21/2016
0.9.10.1 2,736 3/21/2016
0.9.10 2,895 3/11/2016
0.9.9.3 2,974 3/1/2016
0.9.9.2 2,634 3/1/2016
0.9.9.1 2,936 2/28/2016
0.9.9 2,795 2/25/2016
0.9.8.2 2,665 2/19/2016
0.9.8.1 2,615 2/5/2016
0.9.8 2,649 2/4/2016
0.9.7.1 2,633 1/29/2016
0.9.7 2,517 1/28/2016
0.9.6 2,553 1/24/2016
0.9.5.2 2,615 1/21/2016
0.9.5.1 2,584 1/20/2016
0.9.5 2,742 1/20/2016
0.9.4.1 3,292 1/14/2016
0.9.3 2,668 1/13/2016
0.9.2.3 2,658 1/9/2016
0.9.1 2,622 1/4/2016

2.4.9:
   **Fixed:**
   - Issue #86: Toast error message in productive app when missing picture;
   - Issue #85: Android crashes when a system font has been added as an asset or resource;
   - Issue #83: HtmlText Inline style with space char;
   - Issue #82: LineHeight not working (Android);
   
   2.4.8
   **Fixed:**
   - Apple: ".SFUI" font family renders using Times New Roman

   2.4.7
   **Fixed:**
   - More issues with updates to Android Font Management

   2.4.3
   **Fixed:**
   - Unable to LinkAll with iOS and Android;
   - When HasShadow = true, Button size changes between enabled / disabled state;
   - Bubble popup not rendering correctly on UWP;
   - Very intermittent crash on UWP when trying to print (causeed by UWP.WebView Javascript race condition)
   - Label cannot load fonts from Android/Assets

   **New:**
   - PageMargin creatable from library client code via factory methods

   **Improved:**
   - Android performance for Label


   2.4.2

   **Fixed:**
   - ToPdfAsync and ToPngAsync missing the '.' between the filename and the suffix;
   - SVG TintColor not working (thank you @boris-gutman);


   2.4.0.0:

   **New:**

   - Modernized FontExtensions for XF 4.6;
   - Add ability to find minimum (one-line) size for Button and SegmentedControl;
   - GetMinSize on Button and SegmentedControl;
   - Improved Android label rendering;
   - Migrated Pickers to use Xamarin.Forms.CollectionView (instead of ListView);

   **Fixed:**

   Android:
   - Updated to Android Q not call APIs obsoleted at Android Q;
   - Android label sizing issue on 1 line buttons where System font is very large;
   - Label will crash if FontFamily is unknown;
   - Exception thrown because Droid.OnTouchListener can construct NativeGestureDetector on non-ui- thread;
   -

   iOS:
   - Objective-C exception thrown. Name: NSInvalidArgumentException Reason: -[UIKeyCommand image]: unrecognized selector sent to instance;

   General:
   - Forms9Patch.ListView and Picker's crash when LINK ALL is selected;
   - Crash because Listener.Listeners can have null elements;


   2.3.0.0:

   **New:**

   - Forms9Patch.ImageSource.FromSvgText(string svgText) allows SVG string to be used as an Source for Forms9Patch.Image;
   - Added UWP ColorGradientBoxRenderer;
   - Added Color to ActivityIndicatorPopup constructor;
   - Added Scale property to Popups;
   - Alert element (subclass of BubblePopup);
   - Added IconColor to Button and SegmentedControl;
   - Fixed missing components of WebView export + print in iOS;
   - Added optional width (in pixels) argument for ToPngService.ToPngAsync;
   - Added optional PageSize (in points) and PageMargin (in points) argument to ToPdfService.ToPdfAsync;
   - Added new PageSize class to specify standard page sizes and switch between landscape and portrait (for PDFs);
   - Added new PageMargin class to specify margins for PDFs;

   **Fixed:**

   - <a> tag touches not working on Android;
   - Edge case where Image can cause crash because SKCanvas is accidentally disposed;
   - SKBitmaps can be release prematurely, causing future Images using the same EmbeddedResource to not render;
   - Multiple Add/Removes from P42.Utils.ObservableConcurrentCollection are being passed as one item instead of n items;
   - Crash when clearing iOS gesture recognizers;
   - Popup crashes when disposed called on background thread;
   - Prevented BubbleLayout.InvalidateMeasure from being called on background thread;
   - Removed risk of null exception being thrown when Popup navigation is called;
   - Crash on iOS when disposing NativeGestureHandler;
   - AppCenter reported null exception in PopupBase.PopAsync();
   - SIGABRT: Cannot print WebView in iOS without first calling Forms9Patch.WebViewPrintEffect.AttachTo(webView) BEFORE setting webview.Sourc;
   - UWP image auto invalidate could occur on background thread;
   - Permission popup not returning correct PermissionState;
   - Weird edge case where thread will deadlock when Popup is asked to Pop when it has never been generated;
   - iOS print html string not working;
   - Guides not showing additional step required to get Pdf export, Png export, and printing working on iOS;       
   - Fixed missing components of WebView export + print in iOS;
           

   2.2.6.0: Fixed: Printing HTML text not working in iOS;  Guides not up to date WRT using WebViewPrintEffect;
   2.2.5.0: New: Added EntryNoUnderlineEffect (to remove those pesky Android underlines);  Fixed: Multiple memory leaks; Changing Target property of Popup doesn't update target if it is currently visible; Android crash when Pinching or Rotating; SinglePicker can crash when BasePicker.Index has changed to -1; iOS label renderer is elipsizing the last character in very long, multiline, lines=0 strings; Crash when print job fails on UWP; WebView printing, pdf export, and pnd export not working on iOS; Edge case crashes for UWP printing;
   2.2.4.0: Fixed: Inconsistancies in gesture values, resulting in buttons being triggered when pointer has been moved outside of button's bounds; Swiping ListView cell w/o menu can cause scrolling to be disabled;
   2.2.3.0: Fixed: Android.FontManagement.get_FontFiles can call disposed Directory object;
   2.2.2.0: Renamed WebViewExtensions to PrintService;
   2.2.1.0: New: htmlString.ToPdf() and webView.ToPdf() extension methods for iOS and Android; htmlString.Print() extension method. Fixed: Label.LineHeight not working in UWP; Button is not visually responsive enough;
   2.2.0.0: Built for use with XF 4.4;  Fixed: ToPng functions not always providing optimal results; Android WebViewPrintService not working; UWP WebViewPrintService not yet implemented;
   2.1.3.0: Fixed: Button.Command not fired when GroupToggle = None.
   2.1.2.0: Fixed: Targeted Menu cell size too small (Android); Bold and italics tags not working on iOS Forms9Patch.Label.HtmlText when using default font;  Crash when presenting TargetedMenu without Target on iOS;
   2.1.1.0: Fixed: Button text is clipped on iOS versions earlier than 11.3;  TargetedMenu in vertical orientation is displayed modally (instead of paginating) if menu is longer than space available; TargetedMenu renders on wrong page and next pagination is broken if last appearance did not end on first page; Back and forward buttons are not aligned and sized correctly when TargetedMenu is in vertical orientation; Button padding is not sufficient; Modal popup doesn't respond dynamically to Padding changes;
   2.1.0.0: New: EmbeddedHtmlViewSource (for using EmbeddedResource files as a source to a WebView).  Fixed: Layouts not sized to fit content smaller than 40px; Crash if F9P service is called before Xamarin.Forms.Application.Current is set; EmbeddedResource fonts are broken on UWP;  Android TargetedMenu is broken; CornerRadius of FlyoutPopup is not initiated correctly; Extra padding intermittantly appears in layouts;
   2.0.2.0: Fixed: Android crash when FormsGestures.Listener is disposed; Android Label not rendered in some edge cases;
   2.0.1.0: New: TargetedMenu.SelectedSegment. Fixed: Quick push+pop of popups can cause crash; Memory leaks in Android; Collision with Rg.Plugins.Popup in iOS apps;
   2.0.0.0: New: Pattern compliant IDisposible elements; Popups Dispose() will cancel popup; ListView will dispose IDisposable cell contents; Popups will dispose IDisposable contents; Image leaks fixed; Embedded fork of Rg.Plugins.Popups with fixes; Can copy Toast content by long press; DiskSpace helper static class;    Fixed: Right click on cell throws exception in UWP; UWP HtmlToPng causes crash; Button doesn't position icon correctly if label is null; Button layout not correct if TextAlignent=end; ContentView.BackgroundImage not being disposed; Bubble popup doesn't appear if target bounds cannot be found; #29 Frame doesn't appear if it has no content; #30 Doesn't work with XAML previewer; #32 iOS now uses WKWebView instead of UIWebView;
   1.8.1.0: Build with Xamarin.Forms v4.2; New: Added PermissionPopup.AffirmedAsync() and IPopup.Parameter; Fixed: Binding for Segment.Command doesn't work; Fixed: Label is blank in weird Android ListView edge case; Added optional recursion detection and breadcrumbs; Reduced memory footprint of EmbeddedResourceExtensions;  Potentially Fixed: Issue#20 (not able to replicate issue but removed offending code);  Fixed: Issue#25 (Android crash when Visual stype property is set);
   1.8.0.5: Fixed: Android version of Label crashes on pre-M versions of Android;
   1.8.0.4: Android Fixes: Children of Forms9Patch layout elements are assigned Parent property twice; 1.8.0.3 solution to Android cell swipe issue doesn't work on hardware; Forms9Patch.ListView group header labels are not updating with correct text when BindingContext is changed; Inserted cells in Forms9Patch.ListView is not rendering content at first rendering; App crashes when compiled with Link SDK;
   1.8.0.3: Android Fixes: BubblePopup Content not positioned correctly after screen orientation change; Labels not rendered correctly upon re-rerendering (extreme edge case); ListViewRenderer and ScrollViewRenderer are intercepting FormsGestures touches causing all but tap gesture to fail; BubblePopup not positioned correctly after orientation change.  Change: Button.Lines default changed to 0.
   1.8.0.2: Fixed: Label causes crash on older versions of iOS when default FontSize is used;
   1.8.0.1: Added Xamarin.Android.Support.Core.Utils dependency to NuSpec; Added XF4.0 Android dependencies to NuSpec;
   1.8.0.0: New: Built for Xamarin.Forms 4; FlyoutPopup can be cancelled with Swipe gesture; TargetedMenu now supports Vertical Orientation; Buttons, by default, have IsLongPressEnabled=false (for faster response); Added IconFontFamily to TargetedMenu;  Fixed: Intermittant failure to render labels when in ListView; HardwareKeyPage not working in Xamarin.Forms.Shell; Empty Label.Text causes crash; Not all FormsGestures working on all Xamarin.Forms elements; Rendering of ListView becomes slower and slower when cell content is changed; Label is truncated in some edge cases (Android); ModalPopup does not respond to WidthRequest or HeightRequest; ListView crash because Xamarin.Forms.ScrollView is disposed pre-maturely (thanks Xamarin!); SegmentedControl returning IsTruncated when it isn't; First display of picker may have scroll position in wrong place; Crash because LabelRenderer.Control or LabelRenderer.Element is null; Crash when trying to get the location of a view that has not yet been rendered; Crash when FormsGestures is called on a disposed Android view; Crash when trying to use a custom font that doesn't have ".Resources" in its EmbeddedResourceId; BubblePopup appearing as ModalPopup on UWP when window is small or not near top left of screen; UWP back button only clears top most popup; UWP, SegmentedControl has shadow not showing state correctly; TargetedMenu rendering is too slow;
   1.7.0.0: New: FlyoutPopup makes it easy to create flyout views that dock on the left, right, top or bottom sides of the screen.
   1.6.7.3: Fixed: ModalPopup not centered set to LayoutOption.Fill; Updates: replaced iOS deprecated methods layoutManager.LineFragmentRectForGlyphAtIndex and layou;tManager.CharacterIndexForPoint; Xamarin.Android.Arch.Core packages from 1.0.3.1 to 1.1.1.1;
   1.6.7.2: Doh! Forgot to merge enhancement meant for 1.6.7.1;
   1.6.7.1: Fixed: Intermittant failure of UWP Label to update when Text or HtmlText changes; Crash when SegmentControl.Segments.Clear() is called on empty Segments collection; Forms9Patch.Image does not update BindingContext of active ImageSource; Enhanced: HtmlText now accepts [ ' ] character as quotation mark for tag attributes;
   1.6.7: Fixed: Label Autofit in Android fails if the system font size has been changed (via device's settings);  SegmentedControl randomly has spaces between segments; Segmented labels in UWP may slowly shrink to MinFontSize when SyncSegmentFontSizes is enabled;
   1.6.6.2: Fixed: Label on Android upsizing the font beyond FontSize causing text to be truncated or not appear; Up gestures are not being triggered on Android (not a FormsGestures issue) causing button taps not to fire; New: Added async Task<PopupPoppedEventArgs> DelayUntilPoppedAsync() to allow inline wait until popup has been popped; Refactored: CancelAsync and PopAsync to accept a "trigger" that is the cause of the action; Added Console.WriteLines to better message when an ImageResource is not found;
   1.6.6.1: Fixed: SVG image files without viewBox attribute fail to render; Updated Package Requirements: Xamarin.Forms 4.0.0.425677, Newtonsoft.Json 12.0.0.0
   1.6.6.0: New: Added PopAfter property (and Create argument) to Popups to indicate the TimeSpan at which a Popup will disappear after appearing; Added BorderColor, BorderWidth, and BorderRadius properties (redundant with OutlineColor, OutlineWidth, and OutlineRadius properties) to make it easier to switch between Forms9Patch and Xamarin.Forms elements.
   1.6.5.1: Removed: IsLongPressEnabled from buttons (a very stupid idea on my part).  If you want faster buttons, set FormsGestures.Droid.Settings.TapThreshold.
   1.6.5.0: Fixed: ListView items are deleted when they are hidden; <br/> tag is intermittantly ignored; Pickers not scrolling to SelectedItem when appearing; Enhancements: Default ListView cell will parse HTML; Added IconFontFamily to buttons (for IconText); Added IsLongPressEnabled to buttons (to allow faster click response as default behavior);  Changes: Update to Xamarin.Forms 3.3.0.967583; Update to Rg.Plugins.Popup v1.1.5.188; Popup's IsAnimationEnabled property is set to false to mitigate Rg.Plugins.Popup issue #122;
   1.6.4.0: Fixed: SegmentedControl not correctly reporting IsClipped; P42.Utils.TextCache is corrupted if writing when app crashes;
   1.6.3.0: New: Added IsHeadlessTest property to P42.Utils.Enviroment to address uncertainty of MainThreadId property in headless tests; Fixed:  Android: Label with <a> tag in cell won't click through to cell when clicked in non <a> tag text; Null exception in Forms9Patch.UWP.HardwareKeyListenerEffect.cs; Android and UWP, failure to re-render label with AutoFit!=None when Parent container is unhidden;
   1.6.2.1: Fixed: UWP throws "System.IO.FileLoadException: ... SharpDX.Direct2D1, Version=4.2.0" because SharpDX.Direct2D1 NuGet upgraded in Forms9Patch.UWP build but not in the Forms9Patch.nuspec.
   1.6.2: Enhanced: Make P42.Utils.Environment.MainThreadId settable; Fixed: UWP: P42.Utils.DownloadCache not working;  Android: Pickers are blank; Forms9Patch.ListView not responding to ScrollTo in some edge cases; Forms9Patch.Label not rendering correctly when Lines=0;
   1.6.1.1: Fixed: Label.AutoFit=Lines not sizing correctly when unconstrained;
   1.6.1: Fixed: Android: Nulled out item in MimeItemCollection causes crash when accessed; Android: HtmlToPng causes crash; Removing multiple popups in series causes removal animation to fail; 3 digit hex colors are not interpreted correctly in HtmlLabel; Android: crash from NativeGestureListener failure; Magnifying glass (iOS) not showing contents of popups; BubblePopup not rendering full size in some orientations.
   1.6.0: Fixed: Unable to create Forms9Patch.Grid in XAML; BubblePopup not responding to PointerLength; Image HeightRequest/WidthRequest too easily overpowered by other members of StackLayout.  Enhancements: Popups now respond to LayoutAlignents; Popups respond to size and position changes in Target; Forms9Patch.Image with SVG ImageSource now responds to Opacity and TintColor; AcivityIndicatorPopup now responds to Scale property.
   1.5.0.9: Reverted to SkiaSharp 1.59.3 to reduce likelihood of crashes related to rendering shadows with SkiaSharp 1.60 (https://github.com/mono/SkiaSharp/issues/569); Added Forms9Patch.Analytics delegates to all Forms9Patch users to keep tabs on if this was effective;
   1.5.0.8: Fixed: Animation of popups not smooth; Fixed: Too much effort to assure actions are on the UI Thread;
   1.5.0: Refactored layout engine to SkiaSharp.Views.Forms to eliminate device specific issues; Refactored popups to use Rg.Plugins.Popup to eliminate the need for RootPage and addresse failure to render popups in modal pages in iOS; Fixed issues with Label vertical alignment in iOS; Fixed: (Android) failure to detect gestures when element is embedded inside of another element that is monitoring gestures;
   1.4.1: Fixed: Clipboard, DataSharing and HardwareKeyListener UWP dependencies not registered.
   1.4.0: New: Clipboard supports multiple objects of same Mime type, Inter-app Data Sharing; Fixed: HardwareKeyboardListener crashes in some UWP implementations, Popups crashes in Android implementations when instantiated before Forms9Patch.RootPage is instantiated;  Eliminated need for Android "forms9patch_copy_paste_authority" string.
   1.3.3: Fixed: targeted popups (Bubble, TargetedToast, TargetedMenu) will, after the device orientation has changed, render in wrong location when pointing at an element inside of a ScrollView.
   1.3.2: New: KeyboardService.Height and KeyboardService.HeightChanged allow you to resize your layout views in response to changes in the software keyboard.
   1.5.3.2: Fixed: Xamarin.Forms 3.0 UWP: Popups, Buttons, and Layouts are rendering blank.
   1.3.0.0: New: Forms9Patch is open source!  Get it at https://1drv.ms/u/s!AkPAsLOJX3DChFJLwyOMwJgpVXfQ  Fixed: failure to build because of orphaned references to SkiaSharp.Extended.Svg;
   1.2.1.0: Fixed: Clipboard entry reading fails on iOS; Work around for SkiaSharp 1.60 Lattice bug;
   1.2.0.0: Fixed: Android crash if using custom font and app cache is cleared.  New: Clipboard and HardwareKey classes (documentation is coming!).  NOTE: You must add `<string name="forms9patch_copy_paste_authority">*your_Android_app_package_name_here*.f9pcopypaste</string>` to your Android project's `Resources/values/strings.xml` file.  See the GitHub Forms9PatchDemo app for an example.
1.1.1.0: Fixed: iOS Label renders at MinFontSize when Lines=0 and AutoFit=None; Android Label truncates last character when Lines=0 and AutoFit=Width; SinglePicker View working on UWP desktop.  Faster SegmentedControl rendering.  Improved Android reliability.
1.1.0.0: New: SVGs are now valid image sources!  Fixed: Shape outlines are not always full thickness; Button.Clicked event requires double click to fire on Andriod.
1.0.1.3: Fix: Android renderers use Android SDK calls not supported by Gingerbread; PCL.Utils.ApplicationStorageExtensions not using correct directory;
1.0.1.2: Fix: Instantiation of popup, before App.MainPage set to Forms9Patch.RootPage, causes crash; iOS button text not always appearing; Fixed: Default padding not zero for Forms9Patch layouts (other than Frame); Changed: Forms9Patch.Frame is not longer obsolete; IPopup is public;
1.0.1.1: Fix: Crash on older versions of Windows; Change: IPopup is public;
1.0.0.0: Full UWP Support;
0.10.3.10: UWP Release;
0.10.3.5: Fixed: Android implementation of FormsGestures failing in Xamarin.Forms 2.4; Android implementation of popups not re-rendering correctly upon 3rd or 4th display;  Added: pre-alpha of the UWP implmentation of the following Forms9Patch elements: Image, ImageSource, AbsoluteLayout, ContentView, Frame, Grid, ManualLayout, RelativeLayout, StackLayout, ImageButton, MaterialButton, MaterialSegmentedControl, Segment, RootPage, ActivityIndicatorPopup, ModalPopup, PermissionPopup, Toast;  
0.10.3.4: Fixed: Size of last segment of MaterialSegmentedController does not always match other segments; iOS intermittantcrash when Image is disposed;
0.10.3.3: Fixed: IconImage dissappears after pressing Android rendering of ImageButton; Some MultiResourceImages are not fitted properly on Android;
0.10.3.2: Fixed: ImageButton does not return to default state after selected; ImageButton triggers Tapped event twice;
0.10.3.1: Fixed: ImageButton crashes when ImageButtonState properties (DefaultState, PressedState, etc) are not set.
0.10.3.0: ImageButton, MaterialButton and MaterialSegmentedControl has been enhanced with HorizontalTextAlignment and VerticalTextAlignment properties.  MaterialSegmentedControl also has IntraSegmentSpacing and IntraSegmentOrientation properties; Obsolete: ImageButton, MaterialButton and MaterialSegmentedControl Alignment property; Fix: Potential crash when deconstructing Image elements.
0.10.2.16: Fixed: iOS rendering of images and fonts in XAML Previewers; Presentation of popups with modal pages.
0.10.2.13: Fixed multiple edge case rendering issues with Label.
0.10.2.12: Changed: PCL Profile from 259 to 111.  Fixed: ImageSource does not open Embedded Resource image when used in a library.
0.10.2.11: Fixed: (Android) Back button causes app to exit.
0.10.2.10: Fixed: Android Label not rendering in Xamarin.Studio's XAML Previewer;
0.10.2.9: Fixed: Fit=LabelFit.Lines not working when truncating on iOS; Modified: Buttons now default to Fit=LabelFit.Width and Padding=4;
0.10.2.8: Added the SelectedBackgroundColor and SelectedFontColor properties to MaterialButton and MaterialSegmentedControl
0.10.2.7: Fixed: Failure to dynamically resize Label when text changes.
0.10.2.6: Fixed: ImageButton not returned to full opacity when IsEnabled is programically set to true;
0.10.2.5: Fixed: bound values of ImageButtonState properties are not used on initialization.
0.10.2.4: Added: TintImage property to MaterialButton and MaterialSegmentedController to control if ImageSource image is tinted with FontColor;
0.10.2.3: Fixed: Unable to select portion of Xamarin.Forms.ListView cell that is covered by Forms9Patch.Label; Android Forms9Patch.Label not always updating correctly when BindingContext has changed; Added: ApplicationInfoService to get application's Name, Bundle/Package Identifier, Build number, and Version name;
0.10.2.2: Fix: ability to listen to gestures on Forms9Patch elements; Fix: RootPage responds correctly to changes in iOS status bar; Added: ColorGradientBox element;
0.10.2.1: Fix: Intermittant crash on Android when releasing layouts.
0.10.2.0: Now fully supports Shared Library apps.  Apparently, it did all along *except* for Embedded Resource fonts.  Now that has been fixed.
0.10.1.0: Added support for <a> tag to HtmlText property of Label; Added HapticsMode and HapticsEffect properties to buttons;
0.10.0.1: Fix: failure to use some Forms9Patch properties in XAML ResourceDictionary
0.10.0.0: Optimized for rendering speed; fix: Bubble popup not appearing with MasterDetailPage; fix: BubblePopup not responding to Margin property; Added Toast, BubbleToast;
0.9.13.5: Fix: Crash from Label object being instantiated and held a period without being rendered.
0.9.13.4: Fix: iOS FormsGestures library Panning event proides erratic results.
0.9.13.3: Fix: Android Label's Lines property does not truncate when LineBreakMode is not Start, Mid, or Center; Added: ActualFontSize readonly property to Label to give access to fit adjusted font size.
0.9.13.2: New: Added IsElliptical property to MaterialButton and the layout elements; Enabled the Opacity property of Image element.
0.9.13.1: New: Added CancelOnBackgroundTouch Property (default: true) to ModalPopup and BubblePopup
0.9.13.0: New: CustomFontEffect platform effect can be applied to Xamarin.Forms Label, Button, Entry, and Editor elements to allow the EmbeddedResourceID of PCL Embedded Resource fonts as value for FontFamily property.
0.9.12.5: Fixed: ImageButton in ContentView fails to correctly render state changes in BackgroundImage (Android).
0.9.12.4: Fixed: resizing of button labels when text is changed.
Enhanced: Forms9Patch.ImageSource.FromMultiResource uses first portion of path of Embedded Resource to determine which assembly to search.
Changed: Lines property of Label sets the max number of lines when Fit=LabelFit.None.
0.9.12.2: Fixed: (1) crash when render Label in Horizontal Orientation in StackLayout; (2) Failure to render Label in some layouts; (3) Failure to autofit some one-character labels correctly; (4) Failure to resize label when bounds changes; Enhanced: Can refer to iOS system fonts by using their name as value for FontFamily property.
0.9.12.2: Fixed: (1) crash when instantiating buttons on iOS release builds; (2) iOS HtmlText <tt> tag combined with <b>, <u>, or <i> fails to render font correctly; (3) Image button touch intermittantly fails.
Enhanced: Width and Height values of LabelFit are now supported for labels with unimposed Height.
0.9.12.1: Fixed: (1) failure to get bold and/or italic version of some iOS system fonts; (2) Multi-line labels not appearing so on iOS; (3) 9Patch images market to edge failing to render on iOS;
0.9.12.0: New: Width and Lines Autofit for Labels.  TrailingImage property for ImageButton, MaterialButton and MaterialSegmentedController. Forms9Patch.FontExtensions.LoadedFontFamilies() lists all currently loaded fonts.
Fixed: iOS HtmlMarkup underlines don't match font color, Default Android image button label missing for some states.  Unable to bind to Segment.  Able to unselect Segment when in Radio mode.
0.9.11.2: Fixed: in iOS, Images will have height or width of 1 (instead defaulting to source image height or width) when HeightRequest or WidthRequest is not set.
0.9.11.1: Fixed: Issue where Forms9Patch.iOS.Settings.LicenseKey throws System.NullRefernceException.
0.9.11.0: Added HTML markup to Label, MaterialButton, Segment, and ImageButtonState elements.
0.9.10.7: Built for Xamain Forms 2.2
0.9.10.6: Fixed crash when no Target is given for BubblePopup.  Fixed failure to present popups when used w/ PushModalAsync().
0.9.10.4: Added Cancel method to Popups; Auto-cancel Popups when Android [back] button is pressed.
0.9.10.3: Improved reliabilty of rendering of 9patch backgrounds when used in ListView in Android.
0.9.10.2: Fixed AOT issue that caused BubblePopup not to work on iOS devices.
0.9.10.1: Fixed layout of NinePatch backgrounds when used in a ListView on Android.
0.9.10.0: Added ModalPopup and BubblePopup elements.  See demo app for example.
0.9.9.3: 25x Improved tap response on all buttons; Fixed ImageButton.Background rendering issue.
0.9.9.2: 3x Improved iOS image loading time.  Known issue: ImageButton Fails to present anything but DefaultState.BackgroundImage - will be fixed very soon.
0.9.9.1: Fixed issue with comping for iOS devices.
0.9.9.0: Added:
(1) PressingState to ImageButton to enable customization of the button for when it is in the pressed state.
(2) LongPressing and LongPressed events have been added to the ImageButton, MaterialButton, and Segment element.
(3) SegmentLongPressing and SegmentLongPressed events have been added to the MaterialSegmentedControl element.
(4) Renamed ImageButton's Clicked event to Tapped.
0.9.8.2: Fixed not all XAML attributes working for ImageButtonState.
0.9.8.1: Fixed:  XAML Segments Attribute for MaterialSegmentButton; Added FontColor and FontAttributes properties to Segment
0.9.8.0+ Added MaterialSegmentControl, Added Orientation property to MaterialButton
0.9.7.1 Fixed: MaterialButton render when image but no text present.
0.9.7.0 Added ImageButton and MaterialButton elements, Added HasShadow property to Android and iOS AbsoluteLayout, Frame, Grid, RelativeLayout, and StackLayout layouts.
0.9.6.0 Fixed intermittant iOS UIImage.ImageWithData double free, Added RelativeLayout, Grid, and AbsoluteLayout Elements
0.9.5.2 Fixed ContentView background scalable image rendered as non-scalable image if CapsInset has a one or two -1 values
0.9.5.1 Fixed scaling of ContentView BackgroundImage
0.9.5 1) Added Fill (AspectFill, AspectFit, Fill and Tile) property to Image; 2) Added ContentView and Frame elements with BackgroundView and (for Frame) OutlineWidth and OutlineRadius properties
0.9.4 Bug fix Correct resizing when iOS screen orientation changes
0.9.3 fix race condition during debug where iOS Renderer releases Element before releasing renderer.
0.9.2 Bug fix for not properly scaling when parent space is smaller than base image but larger than base image less complaint portion.
0.9.1 beta release
0.9.1 fix: scaling of scalable images larger than parent space