{"id":47099,"date":"2020-04-29T12:29:41","date_gmt":"2020-04-29T19:29:41","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/xamarin\/?p=47099"},"modified":"2020-04-29T12:34:11","modified_gmt":"2020-04-29T19:34:11","slug":"xamarin-forms-4-6","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/xamarin\/xamarin-forms-4-6\/","title":{"rendered":"Xamarin.Forms 4.6: Material Components, Shell, and the Future"},"content":{"rendered":"<p>Today, we are shipping Xamarin.Forms 4.6 with a host of quality improvements, including several new feature previews. With more controls available \u201cin the box\u201d than ever before, it has never been easier to quickly build quality mobile apps.<\/p>\n<h2>Visual and Material Design<\/h2>\n<p>In 3.6, we introduced <a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/user-interface\/visual\/\">Visual<\/a>. A simple API for quickly swapping out the default control renderers. To help you achieve a consistent look-and-feel between iOS, we also shipped the <a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/user-interface\/visual\/material-visual\">Material Design controls<\/a> from Google to match the default Android experience.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-47115\" src=\"https:\/\/devblogs.microsoft.com\/xamarin\/wp-content\/uploads\/sites\/44\/2020\/04\/visual-4-6.png\" alt=\"Image visual 4.6\" width=\"660\" height=\"700\" srcset=\"https:\/\/devblogs.microsoft.com\/xamarin\/wp-content\/uploads\/sites\/44\/2020\/04\/visual-4-6-284x300.png 284w, https:\/\/devblogs.microsoft.com\/xamarin\/wp-content\/uploads\/sites\/44\/2020\/04\/visual-4-6-768x813.png 768w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><\/p>\n<p>Now in 4.6, we are updating the bindings to Google\u2019s library. We have improved the styling support for things like, setting a button\u2019s &#8216;Disabled&#8217; text color. The latest library also removes the reference to <a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/user-interface\/webview?tabs=macos#uiwebview-deprecation-and-app-store-rejection-itms-90809\">Apple\u2019s deprecated UIWebView<\/a>.<\/p>\n<h2>Shell Fly-out Styling<\/h2>\n<p><a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/app-fundamentals\/shell\/\">Shell<\/a> vastly simplifies standing up your application menu structure. Whether using <a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/app-fundamentals\/shell\/tabs\">tabbed navigation<\/a> or a <a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/app-fundamentals\/shell\/flyout\">Fly-out menu<\/a>. To make styling easier, the fly-out <a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/app-fundamentals\/shell\/flyout#define-flyoutitem-appearance\">item templates<\/a> have exposed both style classes. As well as element names to implement your designs on the icon, text, and container.<\/p>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr>\n<td style=\"width: 33.3333%;\"><strong>Flyout Item Part<\/strong><\/td>\n<td style=\"width: 33.3333%;\"><strong>Style Class Name<\/strong><\/td>\n<td style=\"width: 33.3333%;\"><strong>Element Name<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\"><strong>Text<\/strong><\/td>\n<td style=\"width: 33.3333%;\">FlyoutItemLabelStyle<\/td>\n<td style=\"width: 33.3333%;\">FlyoutItemLabel<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\"><strong>Icon<\/strong><\/td>\n<td style=\"width: 33.3333%;\">FlyoutItemIconStyle<\/td>\n<td style=\"width: 33.3333%;\">FlyoutItemIcon<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\"><strong>Container<\/strong><\/td>\n<td style=\"width: 33.3333%;\">FlyoutItemLayoutStyle<\/td>\n<td style=\"width: 33.3333%;\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-47119 size-full\" src=\"https:\/\/devblogs.microsoft.com\/xamarin\/wp-content\/uploads\/sites\/44\/2020\/04\/shell-styling-4-6-1.png\" alt=\"Image shell styling 4.6\" width=\"660\" height=\"700\" srcset=\"https:\/\/devblogs.microsoft.com\/xamarin\/wp-content\/uploads\/sites\/44\/2020\/04\/shell-styling-4-6-1-284x300.png 284w, https:\/\/devblogs.microsoft.com\/xamarin\/wp-content\/uploads\/sites\/44\/2020\/04\/shell-styling-4-6-1-768x813.png 768w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><\/p>\n<p>Take advantage of the <a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/user-interface\/visual-state-manager\">VisualStateManager<\/a> to style each state of the fly-out item template.<\/p>\n<pre class=\"prettyprint\">&lt;Style\r\n            TargetType=\"Layout\"\r\n            ApplyToDerivedTypes=\"True\"\r\n            Class=\"FlyoutItemLayoutStyle\"&gt;\r\n            &lt;Setter\r\n                Property=\"HeightRequest\"\r\n                Value=\"44\" \/&gt;\r\n            &lt;Setter\r\n                TargetName=\"FlyoutItemLabel\"\r\n                Property=\"Label.FontSize\"\r\n                Value=\"16\" \/&gt;\r\n            &lt;Setter\r\n                TargetName=\"FlyoutItemLabel\"\r\n                Property=\"Label.TextColor\"\r\n                Value=\"{StaticResource TextOnLightColor}\" \/&gt;\r\n            &lt;Setter\r\n                TargetName=\"FlyoutItemLabel\"\r\n                Property=\"Label.HeightRequest\"\r\n                Value=\"44\" \/&gt;\r\n            &lt;Setter\r\n                Property=\"VisualStateManager.VisualStateGroups\"&gt;\r\n                &lt;VisualStateGroupList&gt;\r\n                    &lt;VisualStateGroup\r\n                        x:Name=\"CommonStates\"&gt;\r\n                        &lt;VisualState\r\n                            x:Name=\"Normal\"&gt;\r\n                            &lt;VisualState.Setters&gt;\r\n                            &lt;\/VisualState.Setters&gt;\r\n                        &lt;\/VisualState&gt;\r\n                        &lt;VisualState\r\n                            x:Name=\"Selected\"&gt;\r\n                            &lt;VisualState.Setters&gt;\r\n                                &lt;Setter\r\n                                    Property=\"BackgroundColor\"\r\n                                    Value=\"#FF3300\" \/&gt;\r\n                                &lt;Setter\r\n                                    TargetName=\"FlyoutItemLabel\"\r\n                                    Property=\"Label.TextColor\"\r\n                                    Value=\"White\" \/&gt;\r\n                            &lt;\/VisualState.Setters&gt;\r\n                        &lt;\/VisualState&gt;\r\n                    &lt;\/VisualStateGroup&gt;\r\n                &lt;\/VisualStateGroupList&gt;\r\n            &lt;\/Setter&gt;\r\n        &lt;\/Style&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p>Provide your own template design. Then combine that with these new capabilities for even more customization.<\/p>\n<h2>Navigating Back<\/h2>\n<p>Often the native platform provides a back button to return to the previous page. However, in some cases (such as modal navigation), it is not clear what the previous route was. In Xamarin.Forms 4.6, use a simple shortcut to jump back to the last navigation state of your application. Do this by using the URI \u201c..\u201d. Consider the below flight results page that is opened from several places within the app:<\/p>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr>\n<td style=\"width: 50%;\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-47123\" src=\"https:\/\/devblogs.microsoft.com\/xamarin\/wp-content\/uploads\/sites\/44\/2020\/04\/back-to-book-4-6.gif\" alt=\"Image back to book 4 6\" width=\"472\" height=\"983\" \/><\/td>\n<td style=\"width: 50%;\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-47122\" src=\"https:\/\/devblogs.microsoft.com\/xamarin\/wp-content\/uploads\/sites\/44\/2020\/04\/back-to-today-4-6.gif\" alt=\"Image back to today 4 6\" width=\"472\" height=\"983\" \/><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre class=\"prettyprint\">public class TodayViewModel : BaseViewModel\r\n{\r\n    public Command FindLocationsCommand { get; set; }\r\n\r\n    public DateTime HomeUntilDate { get; set; } = DateTime.Today;\r\n\r\n    public TodayViewModel()\r\n    {\r\n        FindLocationsCommand = new Command(FindLocations);\r\n    }\r\n\r\n    private async void FindLocations()\r\n    {\r\n        await Shell.Current.GoToAsync($\"results?start={HomeUntilDate.ToString(\"yyyyMMddHHmmss\")}\");\r\n    }\r\n}<\/pre>\n<p>In order to go back, provide your own close or cancel button that calls this navigation:<\/p>\n<pre class=\"prettyprint\">await Shell.Current.GoToAsync(\"..\");<\/pre>\n<p>Just like that! The navigation rewinds a step to where you just were. All still using the same convenient URI navigation provided by Shell.<\/p>\n<h2>The Future: Preview Features<\/h2>\n<p>We are shipping fast and often to tighten the feedback loop with you. Also to make sure we are delivering the most impactful features. One way we do this is by shipping new features under an Experimental Flag. All while we are finalizing the API. This helps us to merge valuable community contributions faster, and then polish them within the product. To get started with these features, add the following flag(s) to your App.xaml.cs constructor:<\/p>\n<pre class=\"prettyprint\">Device.SetFlags(new[] {\r\n    \"RadioButton_Experimental\",\r\n    \"AppTheme_Experimental\",\r\n    \"Markup_Experimental\",\r\n    \"Expander_Experimental\"\r\n} );<\/pre>\n<h3>RadioButton<\/h3>\n<p>Thanks to the <a href=\"https:\/\/github.com\/xamarin\/Xamarin.Forms\/pull\/5349\">original work from Andrei Nitescu<\/a> later <a href=\"https:\/\/github.com\/xamarin\/Xamarin.Forms\/pull\/8910\">completed by Gerald Versluis<\/a>, we are introducing the new RadioButton control. As an experimental control, the work to finalize the API is ongoing. Although, you can start taking advantage of it today! To group radios together, just add a GroupName:<\/p>\n<pre class=\"prettyprint\">&lt;StackLayout&gt;\r\n    &lt;RadioButton GroupName=\"Size\" Text=\"Small\" \/&gt;\r\n    &lt;RadioButton GroupName=\"Size\" Text=\"Medium\"\/&gt;\r\n    &lt;RadioButton GroupName=\"Size\" Text=\"Large\"\/&gt;\r\n&lt;\/StackLayout&gt;<\/pre>\n<p>To retrieve the selected value, subscribe to the <strong>CheckedChanged<\/strong> event:<\/p>\n<pre class=\"prettyprint\">void RadioButton_CheckedChanged(object sender, EventArgs e)\r\n{\r\n    RadioButton rb = sender as RadioButton;\r\n    if(rb.IsChecked)\r\n        Debug.WriteLine($\"You chose: {rb.GroupName} : {rb.Text}\");\r\n}<\/pre>\n<h3>Expander<\/h3>\n<p><a href=\"https:\/\/github.com\/AndreiMisiukevich\">Andrei Misiukevich<\/a> has contributed a container control that hides\/reveals content, aptly named Expander. The API for this control follows the WPF predecessor and is easy to use:<\/p>\n<pre class=\"prettyprint\">&lt;Expander FlexLayout.Basis=\"100%\" Margin=\"0,0,0,10\"&gt;\r\n    &lt;Expander.Header&gt;\r\n        &lt;StackLayout Orientation=\"Horizontal\" Margin=\"0,0,0,6\"&gt;\r\n        &lt;Image Source=\"{StaticResource IconTodaySm}\"&gt;\r\n\r\n        &lt;\/Image&gt;\r\n        &lt;Label Text=\"Next Flight: STL to MAUI (5\/19\/2020)\"\r\n                TextColor=\"White\"\r\n                FontSize=\"14\"\/&gt;\r\n            &lt;\/StackLayout&gt;\r\n    &lt;\/Expander.Header&gt;\r\n                        \r\n    &lt;Grid&gt;\r\n        &lt;Grid.ColumnDefinitions&gt;\r\n            &lt;ColumnDefinition Width=\"14\"\/&gt;\r\n            &lt;ColumnDefinition Width=\"*\"\/&gt;\r\n        &lt;\/Grid.ColumnDefinitions&gt;\r\n\r\n        &lt;BoxView\r\n            Grid.RowSpan=\"6\"\r\n            WidthRequest=\"4\" BackgroundColor=\"White\"\r\n                    VerticalOptions=\"Fill\"\r\n                    HorizontalOptions=\"Center\"\/&gt;\r\n        &lt;Label\r\n            Grid.Row=\"0\"\r\n            Grid.Column=\"1\"\r\n            Text=\"11:20 AM - Depart STL\"\/&gt;\r\n        &lt;Label\r\n            Grid.Row=\"1\"\r\n            Grid.Column=\"1\"\r\n            Text=\"4:05 PM - Arrive SFO\"\/&gt;\r\n        &lt;Label\r\n            Grid.Row=\"2\"\r\n            Grid.Column=\"1\"\r\n            Text=\"4:45 PM - Depart SFO\"\/&gt;\r\n        &lt;Label\r\n            Grid.Row=\"3\"\r\n            Grid.Column=\"1\"\r\n            Text=\"10:30 PM - Arrive HNL\"\/&gt;\r\n        &lt;Label\r\n            Grid.Row=\"4\"\r\n            Grid.Column=\"1\"\r\n            Text=\"11:00 PM - Depart HNL\"\/&gt;\r\n        &lt;Label\r\n            Grid.Row=\"5\"\r\n            Grid.Column=\"1\"\r\n            Text=\"11:45 PM - Arrive OGG\"\/&gt;\r\n    &lt;\/Grid&gt;\r\n\r\n&lt;\/Expander&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-47125\" src=\"https:\/\/devblogs.microsoft.com\/xamarin\/wp-content\/uploads\/sites\/44\/2020\/04\/expander-4-6.gif\" alt=\"Image expander 4.6\" width=\"336\" height=\"700\" \/><\/p>\n<h3>C# UI Extensions<\/h3>\n<p>The popular <a href=\"https:\/\/github.com\/VincentH-Net\/CSharpForMarkup\">CSharpForMarkup<\/a> method extensions from <a href=\"https:\/\/github.com\/VincentH-Net\">Vincent Hoogendoorn<\/a> are also now part of Xamarin.Forms 4.6. While XAML is much beloved, it is not for everyone. Certainly not the only way to write your UI. C# UI extensions enable you to write your UI using a fluent syntax. Couple this with a C# hot reload, such as <a href=\"https:\/\/www.livesharp.net\/\">LiveSharp<\/a>, or Andrei Misiukevich\u2019s <a href=\"https:\/\/github.com\/AndreiMisiukevich\/HotReload\">Hot Reload<\/a>, to have a very productive experience. Below is an example layout using a few of these new extensions, such as Rows.Define(), Row(), Center(), Margins(), and Bind():<\/p>\n<pre class=\"prettyprint\">public class BagTrackerPage : ContentPage\r\n{\r\n    Color BgClr = Color.FromHex(\"#FFFFFF\");\r\n\r\n    Style&lt;Label&gt; LabelStyle = new Style&lt;Label&gt;(\r\n        (Label.TextColorProperty, Color.White)\r\n    );\r\n    private BagTrackerViewModel _vm;\r\n\r\n    public BagTrackerPage() =&gt; Build();\r\n\r\n    void Build()\r\n    {\r\n        BindingContext = _vm = new BagTrackerViewModel();\r\n\r\n        Style&lt;Frame&gt; FrameStyle = new Style&lt;Frame&gt;(\r\n            (Frame.HasShadowProperty, true),\r\n            (Frame.BorderColorProperty, Color.FromHex(\"#333333\"))\r\n                \r\n        );\r\n\r\n        Style&lt;Entry&gt; EntryStyle = new Style&lt;Entry&gt;(\r\n            (Entry.BackgroundColorProperty, Color.Transparent)\r\n        );\r\n\r\n        Resources = new ResourceDictionary();\r\n        Resources.Add(LabelStyle);\r\n        Resources.Add(FrameStyle);\r\n        Resources.Add(EntryStyle);\r\n\r\n        Title = \"Track Your Bags\";\r\n\r\n        Content = new Grid()\r\n        {\r\n            RowDefinitions = Rows.Define(\r\n                            (Row.Title, 44),\r\n                            (Row.Content, Star),\r\n                            (Row.Push, Star)\r\n                        ),\r\n            RowSpacing = 0,\r\n            Padding = new Thickness(30),\r\n            BackgroundColor = Color.White,\r\n            Children = {\r\n                new Label\r\n                            {\r\n                                Text = \"Search by\",\r\n                                FontSize = 24,\r\n                                TextColor = Color.FromHex(\"#333333\")\r\n                            }\r\n                .Row(Row.Title),\r\n                    \r\n                                \r\n                            new Frame\r\n                            {\r\n                                CornerRadius = 0,\r\n                                Padding = 12,\r\n                                Content = new StackLayout\r\n                                {\r\n                                    Spacing = 12,\r\n                                    Children =\r\n                                    {\r\n                                        new Entry\r\n                                        {\r\n                                            Placeholder = \"Bag Tag #\"\r\n                                        },\r\n                                        new Entry\r\n                                        {\r\n                                            Placeholder = \"File Reference #\"\r\n                                        },\r\n                                        new Entry\r\n                                        {\r\n                                            Placeholder = \"Last Name\"\r\n                                        },\r\n                                        new Button\r\n                                        {\r\n                                            Text = \"SEARCH\",\r\n                                            HeightRequest = 66,\r\n                                            StyleClass = new string[] {\"actionButton\" },\r\n                                            CornerRadius = 0,\r\n                                            FontSize = 18\r\n                                        }\r\n                                        .Margins(top: 20)\r\n                                        .Bind(nameof(_vm.SearchCommand))\r\n\r\n                                    }\r\n                                }\r\n                            }.Row(Row.Content), \/\/ Frame\r\n                            new Image\r\n                            {\r\n                                Source = new FontImageSource\r\n                                {\r\n                                    FontFamily = (OnPlatform&lt;string&gt;)Application.Current.Resources[\"FontAwesome\"],\r\n                                    Glyph = IconFont.Suitcase,\r\n                                    Size = 88,\r\n                                    Color = Color.LightGray\r\n                                }\r\n                            }\r\n                            .Center()\r\n                            .Row(Row.Push)\r\n                            \r\n                        \r\n                }\r\n        };\r\n    } \/\/ Build\r\n\r\n    enum Row { Title, Content, Push }\r\n}<\/pre>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-47132\" src=\"https:\/\/devblogs.microsoft.com\/xamarin\/wp-content\/uploads\/sites\/44\/2020\/04\/Screen-Shot-2020-04-28-at-2.48.51-PM.png\" alt=\"Image Screen Shot 2020 04 28 at 2 48 51 PM\" width=\"368\" height=\"700\" \/><\/p>\n<p>For more information, check out the complete <a href=\"https:\/\/docs.microsoft.com\/xamarin\/xamarin-forms\/user-interface\/csharp-markup\">documentation by Vincent<\/a>.<\/p>\n<h3>Font Embedding<\/h3>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/xamarin\/embedded-fonts-xamarin-forms\/\">In 4.5, we introduced font embedding<\/a>, adding fonts to your cross-platform applications. Now in 4.6, we have improved the implementation to handle fonts more consistently. Including added FontImageSource support. To get started, add a font to your library project as an embedded resource. Then, add an assembly tag reference (like below) to inform the compiler about the font. This can be done in the AssemblyInfo.cs, or in any used *.cs file.<\/p>\n<pre class=\"prettyprint\">[assembly: ExportFont(\"fa-solid-900.ttf\")]<\/pre>\n<p>Reference the font by file name or static resource:<\/p>\n<pre class=\"prettyprint\">&lt;OnPlatform x:Key=\"FontAwesome\"\r\n            Default=\"fa-solid-900.ttf\"\r\n            x:TypeArguments=\"x:String\"\/&gt;\r\n\r\n&lt;FontImageSource x:Key=\"IconTabBook\" \r\n                FontFamily=\"{StaticResource FontAwesome}\"\r\n                Glyph=\"{x:Static local:IconFont.TicketAlt}\"\r\n                Size=\"{StaticResource SizeTabIcon}\"\r\n                Color=\"{StaticResource ColorTabIcon}\" \/&gt;<\/pre>\n<p>&nbsp;<\/p>\n<h2>See It In Action<\/h2>\n<p>Watch <a href=\"https:\/\/twitter.com\/jamesmontemagno\">James Montemagno<\/a> on <a href=\"https:\/\/channel9.msdn.com\/Shows\/XamarinShow\/Six-Things-to-Love-in-XamarinForms-46--The-Xamarin-Show\" target=\"_blank\" rel=\"noopener noreferrer\">The Xamarin Show<\/a> to see it in action!\n<center><iframe title=\"Six Things to Love in Xamarin.Forms 4.6 | The Xamarin Show - Microsoft Channel 9 Video\" src=\"https:\/\/channel9.msdn.com\/Shows\/XamarinShow\/Six-Things-to-Love-in-XamarinForms-46--The-Xamarin-Show\/player\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/center><\/p>\n<h2>Get Started Today<\/h2>\n<p>Update your projects from your favorite <a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/cross-platform\/troubleshooting\/questions\/nuget-update\">NuGet package manager<\/a> today! Take advantage of <a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/release-notes\/4.6\/4.6.0\">this latest release<\/a>. Share your projects and progress with us online.<\/p>\n<p>Of course, we crave your feedback. Please <a href=\"https:\/\/github.com\/xamarin\/Xamarin.Forms\/issues\/new\/choose\">open issues on GitHub<\/a> for any additional enhancements or issues to discuss. For more information on this release check the resources below.<\/p>\n<ul>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/release-notes\/4.6\/4.6.0\">Xamarin.Forms 4.6 Release Notes<\/a><\/li>\n<li>Docs\n<ul>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/user-interface\/visual\/material-visual\">Visual and Material Design<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/app-fundamentals\/shell\/navigation\">Shell Navigation<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/user-interface\/radiobutton\">RadioButton<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/user-interface\/expander\">Expander<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/user-interface\/csharp-markup\">C# UI<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/user-interface\/text\/fonts#use-a-custom-font\">Font Embedding<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/github.com\/davidortinau\/FlyMe\">FlyMe Sample App<\/a><\/li>\n<\/ul>\n<figure><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Today, we are shipping Xamarin.Forms 4.6 with a host of quality improvements, including several new feature previews. With more controls available \u201cin the box\u201d than ever before, it has never been easier to quickly build quality mobile apps with Xamarin!<\/p>\n","protected":false},"author":553,"featured_media":47122,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[367],"tags":[8500,1391,23,8501,407,16],"class_list":["post-47099","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-xamarin-forms","tag-4-6","tag-material-design","tag-shell","tag-styling","tag-visual","tag-xamarin-forms"],"acf":[],"blog_post_summary":"<p>Today, we are shipping Xamarin.Forms 4.6 with a host of quality improvements, including several new feature previews. With more controls available \u201cin the box\u201d than ever before, it has never been easier to quickly build quality mobile apps with Xamarin!<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/posts\/47099","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/users\/553"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/comments?post=47099"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/posts\/47099\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/media\/47122"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/media?parent=47099"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/categories?post=47099"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/tags?post=47099"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}