February 6th, 2019

5 Things You’ll Love in Xamarin.Forms 3.5

David Ortinau
Principal Product Manager

Although Valentine’s Day isn’t for a few more days, we just couldn’t wait to celebrate the love by sharing a new stable release of Xamarin.Forms – 3.5. Your engagement and contributions with Xamarin have been heartwarming, and we love working with you.

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’s working!

Let’s take a closer look at what we at Microsoft (in collaboration with you, our fantastic contributors) are delivering in Xamarin.Forms 3.5!

1. Every Layout is Bindable

Perhaps you’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 BindableLayout in an article last month, so let’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):

<StackLayout
     Orientation = "Horizontal"
     BindableLayout.ItemsSource = "{Binding Profile.Friends}">
     <BindableLayout.ItemTemplate>
          <DataTemplate>
          <Grid>
               <Grid.RowDefinitions>
                    <RowDefinition Height = "*" />
                    <RowDefinition Height = "Auto" />
               </ Grid.RowDefinitions>
                    <imageCircle: CircleImage 
                         Grid.Row = "0"
                         Source = "{Binding Picture}"
                         Aspect = "AspectFit"
                         Style = "{StaticResource FriendImageStyle}" />
                    <Label 
                    Grid.Row = "1"
                         Text = "{Binding Name}"
                         Style = "{StaticResource FriendNameStyle}" />
               </ Grid>
          </ DataTemplate>
     </BindableLayout.ItemTemplate>
</ StackLayout>

Breaking down what you see in the XAML above, BindableLayout.ItemsSource and its siblings are attached properties on StackLayout, and that could be any Layout<T> you choose. Set your source to an IEnumerable, define your template, and you’ve got a repeater! Read more about Javier’s blog example here.

image

2. Toolbar Accessibility

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:

  • Toolbar items
  • MasterDetailPage toggle button
  • NavigationPage back button

This pull request 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:

  • iOS / UWP will look for values in this order: AutomationProperties.Name, AutomationProperties.HelpText, and then Text
  • Android will read the AutomationProperties.Name or AutomationProperties.HelpText when provided, and replace the visible Text with those values. (this is a current limitation of Android API 25 and lower)

Unifying an API across multiple platforms is rarely easy and straight forward, so for more details about using Automation Properties check out the documentation and refer to the pull request notes.

3. Unsealing the Span

It’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 file an issue so we can evaluate the code and unblock you. Such was the case when Michael Rumpler (aka MR.Gestures, or Mister Gestures to me) ran into with Span (Issue). Graciously, Gerald Versluis did Michael (and all of us) a favor by submitting a pull request. Go team!

4. Community and Hacktoberfest Contributions

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:

Contributor Description

Akihiko Odaki

[XamlC] Explicitly cast values for ldc.i4 (#4301) Correct names of files under Xamarin.Forms.Controls.Issues.Shared (#4320) [XamlC] Resolve parameters in nested generics (#4061) [Xaml] Add provided value to collection (#4456) [XamlC] Resolve generic parameters of a method with generic return type (#4244) [XamlC] Always enable implicit casting, boxing and unboxing (#4238)

Alan Grgic

[iOS] Add JavaScript dialog delegate to WkWebView (#4254) don’t update source property of iOS webview on load if reading local html content (#4468)

Alexandre Caprais

Set ImageButton property of Android.ImageButtonRenderer public (#4534)

Andoni Morales Alastruey

[GTK] Fix several memory leaks in the GTK backend (#4112) [GTK] Fix synchronization context fairness (#4237) [Xaml] Support correctly custom resource providers (#4236)

Andrei Misiukevich

Fix typeface reset issue (#4019) [iOS] Label TextColor has no effect with FormattedString (#4043) housekeeping ended with https://github.com/xamarin//pull/3999 (#4105) https://github.com/xamarin//issues/4076 fix (#4161) [iOS] Rapidly clicking span (6 times at least) on UITest 3525 throws a null exception (#4109) Fix https://github.com/xamarin//issues/3301 (#4164) https://github.com/xamarin//issues/2831 fixes #2831 (#4111) [Enhancement] Possibility to change IsPassword for MacOS (#4175) fixes #2223 [MacOs] Image from file not getting searched in the bundle fixes #2322 (#4247) [iOS] Change CALayer.Transform in MainThread (#4160) Removed custom entitlements entry for iOS simulator builds (#4257) xamarin/Xamarin.Forms/issues/2315 (#4190) fixes #2315 [macOS] ContextActions on ListView not working (TextCell for example) (#4243) [iOS] ControlsGallery, shake gesture to navigate to the root page (#4263) [MacOs] Implemented InsertPageBefore (#4242)

Andrei Nitescu

Bindable layouts (#4052) [iOS] fix for SearchBar background color (#4229) Fix initial load of pins (#4304)

Axel Gorris

[GTK] Do not show a label in gtk slider renderer (#4098)

Daniel Chalmers

Update README.md (#4290)

Edward Brey

Make ToolbarItem constructor match properties (#4333)

Edwin Wachs

Implementation of method ForceUpdateSize for Cell on macOS (#4104)

Gerald Versluis

[Core, iOS, MacOS, Android, UWP, WPF] ListView hide scroll view scroll bars (#3897) fixes #3843 [iOS] Fix for issue 4295 text decorations gone wild after text update (#4322) [Core] Unseal Span (#4331) fixes #4083 [UWP] Changing IsPassword property changed InputScope (#4181) [UWP] Label MaxLines doesn’t work (#4528) [Core, iOS, Android, UWP, WPF, GTK, Tizen] Implement TextColor on TableSection (#4379) fixes #2910 Implemented colored refresh indicator for ListView pull-to-refresh (#2961) Disable suggestions for all Pickers (#4824) fixes #4629

Ione Souza Junior

Added UI test to B45027 (#4079) Added UI test to B44338 (#4307) fixes #2379 Changed the namespace for all the Issues in the control gallery to Xamarin.Forms.Controls.Issues (#4234) Added UI test to B44044 (#4486) fixes #2377

Kevin Behrens

Move github files to .github dir (#4288)

Martin Zikmund

Removing LineBreakMode support from WindowsResourcesProvider (#4024) UWP Toolbar dynamic overflow (#4022)

masonyc

[iOS] Label HorizontalTextAlignment=“Center” not working in conjunction with LineHeight on iOS (#4275)

mikescandy

Add UI Test. Add instructions. Move to correct namespace (#4170) fixes #2251 Adding instructions and UI tests for Bugzilla44461 (#4144)

Nathaniel Nunes

Switchcell oncolor (#4036) fixes #4027

Noam Yogev

Add Editor.IsTextPredictionEnabled property (#4023)

Paul Datsiuk

[Android] total fix of issue #3575 (#4567)

Peter Moore

GH2691: Make XmlnsDefinitionAttribute public (#2782)

Rasto

ListView should convert item to string when ItemTemplate is not specified (#4016)

Seungkeun Lee

[Tizen] Fix Window alpha update timing (#4119) Fix PropagateEvent value properly on Cells (#4191) Add ImageButton Renderer on Tizen (#4436)

shmin

[Tizen] Fix ToolbarItem (#4416)

Stefan Gerasch

Navigation Page double Popped event Workaround (#3851) fixes #3509

Tomasz Cielecki

Use ViewCompat to set and get label for view (#3996)

Víctor Guzmán

Fix edge case in unsubscribing weak events (#4538)

Víctor Martos

[GTK] Add support for ClickGestureRecognizer (#3971)

Viridovics

Add uitest for 2794 (#4110) fixes #2293

As with every release, the Samsung team continues to add Tizen support across the board for new capabilities. Thank you! You are relentless.

5. Quality and Polish

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.

Some recent progress:

See Xamarin.Forms 3.5 in Action!

Update and Enjoy Today

As always, you can find all the details about the latest release by reviewing the 3.5.0 release notes. 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 file a new issue.

To play around with the features of this and each new release, grab a clone of TheLittleThingsPlayground on GitHub.

BONUS: 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 share with us your thoughts here.

Author

David Ortinau
Principal Product Manager

David is a Principal Product Manager for .NET at Microsoft, focused on .NET MAUI. A .NET developer since 2002, and versed in a range of programming languages, David has developed web, environmental, and mobile experiences for a wide variety of industries. After several successes with tech startups and running his own software company, David joined Microsoft to follow his passion: crafting tools that help developers create better app experiences. When not at a computer or with his family, David ...

More about author

0 comments

Discussion are closed.