{"id":38799,"date":"2019-02-06T12:22:16","date_gmt":"2019-02-06T17:22:16","guid":{"rendered":"https:\/\/blog.xamarin.com\/?p=38799"},"modified":"2019-04-04T15:54:51","modified_gmt":"2019-04-04T22:54:51","slug":"5-things-youll-love-xamarin-forms-3-5","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/xamarin\/5-things-youll-love-xamarin-forms-3-5\/","title":{"rendered":"5 Things You&#8217;ll Love in Xamarin.Forms 3.5"},"content":{"rendered":"<p>\t\t\t\tAlthough Valentine&#8217;s Day isn&#8217;t for a few more days, we just couldn&#8217;t wait to celebrate the love by sharing a new stable release of Xamarin.Forms &#8211; 3.5. Your engagement and contributions with Xamarin have been heartwarming, and we love working with you.<\/p>\n<p>Every month we survey Xamarin developers in Visual Studio and via Twitter while conducting dozens of interviews and listening to your firsthand stories. Why? To make Xamarin better. For you! We have learned that you are more satisfied (+8% for you fans of statistics) with Xamarin when you use our latest versions. Additionally, you have indicated that it is because you like the direction the product is taking and how we are delivering on your specific feedback. Thank you, it&#8217;s working!<\/p>\n<p>Let&#8217;s take a closer look at what\u00a0we at Microsoft (in collaboration with you, our fantastic contributors) are delivering in Xamarin.Forms 3.5!<\/p>\n<h2 id=\"1everylayoutisbindable\">1. Every Layout is Bindable<\/h2>\n<p>Perhaps you&#8217;re one of the many developers that have been longing for a repeater control; something that can display a group of the same thing without all the overhead of a virtualized list control. Thanks to a wonderful contribution from Andrei Nitescu, we are shipping BindableLayout in 3.5.0. He gave us a thorough look at <a href=\"https:\/\/blog.xamarin.com\/xamarin-forms-3-5-a-little-bindable-love\/\">BindableLayout in an article last month<\/a>, so let&#8217;s summarize by looking at a sample from our own Javier Suarez Ruiz on the Visual Studio for Mac team. In the code below he is creating a horizontal list of friends (good choice putting Miguel first btw):<\/p>\n<pre class=\"marking:true lang:xhtml mark:3-4 decode:true\">&lt;StackLayout\r\n     Orientation = \"Horizontal\"\r\n     BindableLayout.ItemsSource = \"{Binding Profile.Friends}\"&gt;\r\n     &lt;BindableLayout.ItemTemplate&gt;\r\n          &lt;DataTemplate&gt;\r\n          &lt;Grid&gt;\r\n               &lt;Grid.RowDefinitions&gt;\r\n                    &lt;RowDefinition Height = \"*\" \/&gt;\r\n                    &lt;RowDefinition Height = \"Auto\" \/&gt;\r\n               &lt;\/ Grid.RowDefinitions&gt;\r\n                    &lt;imageCircle: CircleImage \r\n                         Grid.Row = \"0\"\r\n                         Source = \"{Binding Picture}\"\r\n                         Aspect = \"AspectFit\"\r\n                         Style = \"{StaticResource FriendImageStyle}\" \/&gt;\r\n                    &lt;Label \r\n                    Grid.Row = \"1\"\r\n                         Text = \"{Binding Name}\"\r\n                         Style = \"{StaticResource FriendNameStyle}\" \/&gt;\r\n               &lt;\/ Grid&gt;\r\n          &lt;\/ DataTemplate&gt;\r\n     &lt;\/BindableLayout.ItemTemplate&gt;\r\n&lt;\/ StackLayout&gt;<\/pre>\n<p>Breaking down what you see in the XAML above, <code>BindableLayout.ItemsSource<\/code> and its siblings are attached properties on <code>StackLayout<\/code>, and that could be any <code>Layout&lt;T&gt;<\/code>\u00a0you choose. Set your source to an\u00a0<code>IEnumerable<\/code>, define your template, and you&#8217;ve got a repeater! Read more about Javier&#8217;s <a href=\"https:\/\/javiersuarezruiz.wordpress.com\/2019\/02\/01\/xamarin-forms-utilizando-bindable-layouts\/\">blog example here<\/a>.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/javiersuarezruiz.files.wordpress.com\/2019\/01\/bindable-stackpanel.png?w=700&amp;h=1130\" alt=\"image\" \/><\/p>\n<h2 id=\"2toolbaraccessibility\">2. Toolbar Accessibility<\/h2>\n<p>When you application is accessible, everyone wins, especially your users. The latest version of Xamarin.Forms aims to make application accessibility easier to implement. Three controls that have been notoriously problematic to set up for screen readers are:<\/p>\n<ul>\n<li>Toolbar items<\/li>\n<li>MasterDetailPage toggle button<\/li>\n<li>NavigationPage back button<\/li>\n<\/ul>\n<p>This <a href=\"https:\/\/github.com\/xamarin\/\/pull\/3974\">pull request<\/a> ensures that screen readers (VoiceOver etc.) can now access and read the buttons you place in the navigation bar and toolbars. Generally speaking, here are the rules for each platform:<\/p>\n<ul>\n<li>iOS \/ UWP will look for values in this order: <code>AutomationProperties.Name<\/code>, <code>AutomationProperties.HelpText<\/code>, and then <code>Text<\/code><\/li>\n<li>Android will read the <code>AutomationProperties.Name<\/code> or <code>AutomationProperties.HelpText<\/code> when provided, and replace the visible <code>Text<\/code> with those values. (this is a current limitation of Android API 25 and lower)<\/li>\n<\/ul>\n<p>Unifying an API across multiple platforms is rarely easy and straight forward, so for more details about using Automation Properties check out the <a href=\"https:\/\/docs.microsoft.com\/xamarin\/xamarin-forms\/app-fundamentals\/accessibility\/automation-properties\">documentation<\/a> and refer to the <a href=\"https:\/\/github.com\/xamarin\/\/pull\/3974\">pull request<\/a> notes.<\/p>\n<h2 id=\"3unsealingthespan\">3. Unsealing the Span<\/h2>\n<p>It&#8217;s frustrating when attempting to extend a control to run into a sealed class that stops you dead in your tracks. When this happens, please <a href=\"https:\/\/github.com\/xamarin\/\/issues\/new\/choose\">file an issue<\/a> so we can evaluate the code and unblock you. Such was the case when Michael Rumpler (aka <a href=\"https:\/\/www.mrgestures.com\/\">MR.Gestures<\/a>, or Mister Gestures to me) ran into with <code>Span<\/code> (<a href=\"https:\/\/github.com\/xamarin\/\/issues\/4083\">Issue<\/a>). Graciously, Gerald Versluis did Michael (and all of us) a favor by submitting a <a href=\"https:\/\/github.com\/xamarin\/\/pull\/4331\">pull request<\/a>. Go team!<\/p>\n<h2>4. Community and Hacktoberfest Contributions<\/h2>\n<p>The Xamarin.Forms project has enjoyed a wonderful surge of contributions and participation! Whether it was for the t-shirts or just the personal sense of achievement, we are so glad to have you with us. A handful of improvements are now shipping from your efforts in 3.5.0 including:<\/p>\n<table>\n<colgroup>\n<col \/>\n<col \/> <\/colgroup>\n<thead>\n<tr>\n<th>Contributor<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\n<h3>Akihiko Odaki<\/h3>\n<\/td>\n<td>[XamlC] Explicitly cast values for ldc.i4 (#4301)\nCorrect names of files under Xamarin.Forms.Controls.Issues.Shared (#4320)\n[XamlC] Resolve parameters in nested generics (#4061)\n[Xaml] Add provided value to collection (#4456)\n[XamlC] Resolve generic parameters of a method with generic return type (#4244)\n[XamlC] Always enable implicit casting, boxing and unboxing (#4238)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Alan Grgic<\/h3>\n<\/td>\n<td>[iOS] Add JavaScript dialog delegate to WkWebView (#4254)\ndon\u2019t update source property of iOS webview on load if reading local html content (#4468)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Alexandre Caprais<\/h3>\n<\/td>\n<td>Set ImageButton property of Android.ImageButtonRenderer public (#4534)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Andoni Morales Alastruey<\/h3>\n<\/td>\n<td>[GTK] Fix several memory leaks in the GTK backend (#4112)\n[GTK] Fix synchronization context fairness (#4237)\n[Xaml] Support correctly custom resource providers (#4236)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Andrei Misiukevich<\/h3>\n<\/td>\n<td>Fix typeface reset issue (#4019)\n[iOS] Label TextColor has no effect with FormattedString (#4043)\nhousekeeping ended with https:\/\/github.com\/xamarin\/\/pull\/3999 (#4105)\nhttps:\/\/github.com\/xamarin\/\/issues\/4076 fix (#4161)\n[iOS] Rapidly clicking span (6 times at least) on UITest 3525 throws a null exception (#4109)\nFix https:\/\/github.com\/xamarin\/\/issues\/3301 (#4164)\nhttps:\/\/github.com\/xamarin\/\/issues\/2831 fixes #2831 (#4111)\n[Enhancement] Possibility to change IsPassword for MacOS (#4175) fixes #2223\n[MacOs] Image from file not getting searched in the bundle fixes #2322 (#4247)\n[iOS] Change CALayer.Transform in MainThread (#4160)\nRemoved custom entitlements entry for iOS simulator builds (#4257)\nxamarin\/Xamarin.Forms\/issues\/2315 (#4190) fixes #2315\n[macOS] ContextActions on ListView not working (TextCell for example) (#4243)\n[iOS] ControlsGallery, shake gesture to navigate to the root page (#4263)\n[MacOs] Implemented InsertPageBefore (#4242)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Andrei Nitescu<\/h3>\n<\/td>\n<td>Bindable layouts (#4052)\n[iOS] fix for SearchBar background color (#4229)\nFix initial load of pins (#4304)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Axel Gorris<\/h3>\n<\/td>\n<td>[GTK] Do not show a label in gtk slider renderer (#4098)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Daniel Chalmers<\/h3>\n<\/td>\n<td>Update README.md (#4290)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Edward Brey<\/h3>\n<\/td>\n<td>Make ToolbarItem constructor match properties (#4333)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Edwin Wachs<\/h3>\n<\/td>\n<td>Implementation of method ForceUpdateSize for Cell on macOS (#4104)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Gerald Versluis<\/h3>\n<\/td>\n<td>[Core, iOS, MacOS, Android, UWP, WPF] ListView hide scroll view scroll bars (#3897) fixes #3843\n[iOS] Fix for issue 4295 text decorations gone wild after text update (#4322)\n[Core] Unseal Span (#4331) fixes #4083\n[UWP] Changing IsPassword property changed InputScope (#4181)\n[UWP] Label MaxLines doesn\u2019t work (#4528)\n[Core, iOS, Android, UWP, WPF, GTK, Tizen] Implement TextColor on TableSection (#4379) fixes #2910\nImplemented colored refresh indicator for ListView pull-to-refresh (#2961)\nDisable suggestions for all Pickers (#4824) fixes #4629<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Ione Souza Junior<\/h3>\n<\/td>\n<td>Added UI test to B45027 (#4079)\nAdded UI test to B44338 (#4307) fixes #2379\nChanged the namespace for all the Issues in the control gallery to <em>Xamarin.Forms.Controls.Issues<\/em> (#4234)\nAdded UI test to B44044 (#4486) fixes #2377<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Kevin Behrens<\/h3>\n<\/td>\n<td>Move github files to .github dir (#4288)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Martin Zikmund<\/h3>\n<\/td>\n<td>Removing LineBreakMode support from WindowsResourcesProvider (#4024)\nUWP Toolbar dynamic overflow (#4022)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>masonyc<\/h3>\n<\/td>\n<td>[iOS] Label HorizontalTextAlignment=\u201cCenter\u201d not working in conjunction with LineHeight on iOS (#4275)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>mikescandy<\/h3>\n<\/td>\n<td>Add UI Test. Add instructions. Move to correct namespace (#4170) fixes #2251\nAdding instructions and UI tests for Bugzilla44461 (#4144)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Nathaniel Nunes<\/h3>\n<\/td>\n<td>Switchcell oncolor (#4036) fixes #4027<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Noam Yogev<\/h3>\n<\/td>\n<td>Add Editor.IsTextPredictionEnabled property (#4023)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Paul Datsiuk<\/h3>\n<\/td>\n<td>[Android] total fix of issue #3575 (#4567)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Peter Moore<\/h3>\n<\/td>\n<td>GH2691: Make XmlnsDefinitionAttribute public (#2782)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Rasto<\/h3>\n<\/td>\n<td>ListView should convert item to string when ItemTemplate is not specified (#4016)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Seungkeun Lee<\/h3>\n<\/td>\n<td>[Tizen] Fix Window alpha update timing (#4119)\nFix PropagateEvent value properly on Cells (#4191)\nAdd ImageButton Renderer on Tizen (#4436)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>shmin<\/h3>\n<\/td>\n<td>[Tizen] Fix ToolbarItem (#4416)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Stefan Gerasch<\/h3>\n<\/td>\n<td>Navigation Page double Popped event Workaround (#3851) fixes #3509<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Tomasz Cielecki<\/h3>\n<\/td>\n<td>Use ViewCompat to set and get label for view (#3996)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>V\u00edctor Guzm\u00e1n<\/h3>\n<\/td>\n<td>Fix edge case in unsubscribing weak events (#4538)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>V\u00edctor Martos<\/h3>\n<\/td>\n<td>[GTK] Add support for ClickGestureRecognizer (#3971)<\/td>\n<\/tr>\n<tr>\n<td>\n<h3>Viridovics<\/h3>\n<\/td>\n<td>Add uitest for 2794 (#4110) fixes #2293<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>As with every release, the Samsung team continues to add Tizen support across the board for new capabilities. Thank you! You are relentless.<\/p>\n<h2 id=\"5qualityandpolish\">5. Quality and Polish<\/h2>\n<p>We are thrilled to resume our frequent cadence of shipping not only useful features and enhancements as noted above, but also continuing the flow of fundamental improvements to the core reliability and performance of the toolkit. As we have seeing from the Xamarin.Android team, build times are being reduced, deployment is being sped up, and many mysterious build change problems have been demystified and corrected. The IDE teams are bringing us improvements to the XAML Previewer, an all-new Property Panel, and AI-assisted IntelliSense with IntelliCode.<\/p>\n<p>Some recent progress:<\/p>\n<ul>\n<li><a href=\"https:\/\/blog.xamarin.com\/androids-d8-dexer-and-r8-shrinker\/\">Android\u2019s D8 dexer and R8 shrinker<\/a><\/li>\n<li><a href=\"https:\/\/blog.xamarin.com\/whats-new-for-xamarin-developers-in-visual-studio-2019-preview-2\/\">What&#8217;s New for Xamarin Developers in Visual Studio 2019 Preview 2<\/a><\/li>\n<\/ul>\n<h2>See Xamarin.Forms 3.5 in Action!<\/h2>\n<p><center><iframe width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" src=\"https:\/\/channel9.msdn.com\/Shows\/XamarinShow\/Five-Things-to-Love-About-XamarinForms-35\/player\"><\/iframe><\/center><\/p>\n<h1 id=\"updateandenjoytoday\">Update and Enjoy Today<\/h2>\n<p>As always, you can find all the details about the latest release by reviewing the <a href=\"https:\/\/docs.microsoft.com\/xamarin\/xamarin-forms\/release-notes\/3.5\/3.5.0\">3.5.0 release notes<\/a>. Update Xamarin.Forms to 3.5.0 using your favorite NuGet package manager and do a full rebuild. Please let us know if you encounter issues of any kind, or if you have any idea that will improve your daily use of Xamarin. Just head over to GitHub and <a href=\"https:\/\/github.com\/xamarin\/\/issues\/new\">file a new issue<\/a>.<\/p>\n<p>To play around with the features of this and each new release, grab a clone of <a href=\"https:\/\/github.com\/davidortinau\/TheLittleThingsPlayground\">TheLittleThingsPlayground on GitHub<\/a>.<\/p>\n<p><em>BONUS:<\/em> Keep in mind that 3.5.0 also contains previews of other new features that the Xamarin team is currently developing,. We look forward to receiving your feedback on Shell, Visual, CollectionView, and CarouselView. As you explore these features, please take a moment to <a href=\"https:\/\/aka.ms\/xf-4-feedback\">share with us your thoughts here<\/a>.\t\t<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Take a closer look at 5 important updates we at Microsoft in collaboration with you, our fantastic contributors, are delivering in Xamarin.Forms 3.5!<\/p>\n","protected":false},"author":553,"featured_media":40887,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2,367],"tags":[587,586,589,409,588],"class_list":["post-38799","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developers","category-xamarin-forms","tag-accessibility","tag-bindable-layout","tag-community","tag-releases","tag-span"],"acf":[],"blog_post_summary":"<p>Take a closer look at 5 important updates we at Microsoft in collaboration with you, our fantastic contributors, are delivering in Xamarin.Forms 3.5!<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/posts\/38799","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=38799"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/posts\/38799\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/media\/40887"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/media?parent=38799"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/categories?post=38799"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/tags?post=38799"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}