Uno Platform 3.7 expands our support for the newest WinUI, Project Reunion and Linux, all while continuing performance improvements for WebAssembly head.
Extending WinUI Support
We are continuing the #WinUIEverywhere path by adding support for XAML behaviors for the newly-released WinUI 3.
XAML Behaviors is an easy-to-use means of adding common and reusable interactivity to your Windows applications with minimal code. With Uno Platform, you can take it to any mobile, web or desktop platform. Previously, we provided support for XAML Behaviors for Windows UWP applications, and we have now been upgraded it to support Windows WinUI and Uno Platform applications as well.
We also contributed the Prism Library support for Uno Platform and Project Reunion – WinUI 3. This was merged very recently in the preview bits and will be available as part of the next release. Big thanks to Dan Siegel and Brian Lagunas for their support to get this massive PR merged (200+ files changed!).
New WinUI Control ported – SwipeControl
The SwipeControl is part of the WinUI 2 library, and is used a lot on touch devices. We ported this control to Uno Platform to enhance the user experience of your apps:
GTK/Linux TextBox support
By popular demand, we added support for text input through the TextBox control in the GTK/Skia heads, which powers Linux support. So, you will be able to use classic WinUI text inputs right on Linux. Here is an example on how the feature behaves, using just regular C# and XAML; let us know how this is working for you:
We are continuing to include performance improvements throughout Uno, and particularly in some of the hottest execution paths. After the .NET team fixed many WebAssembly AOT issues in .NET 6, we were able to start profiling the code again, and found some interesting changes to make.
Using the speedscope app, we can find interesting hot paths that lead to issues being fixed in .NET WebAssembly support, or ensure proper options are being enabled.
Here is an example of traces that speedscope can show:
In this screenshot, we can see that the AOT compiler generates interpreter transitions from AOTed code in a critical path, where it should have generated AOTed WebAssembly code for improved performance.
We could also make changes to the way ResourceDictionary internally handles lookup to create a specialized non-generic version of Dictionary<,>, giving a 40% improvement in worst case lookups during resource resolution. In Mono’s AOT compiler, generics are particularly costly because of what are called “Generic Shared ValueType” and removing generics can provide important performance gains.
Additional similar changes were included in Uno Platform that are impacting all the platforms we support, such as removing foreach loops or using statements.
We are measuring performance improvements using Benchmark .NET and CI integrated measurements, as well as the sample application we’ve recently made available.
– @luke-welton fixed an issue in the WinUI template caused by invalid collection of the main window
– @microhobby contributed fixes to pointers support in the very new support for WSLg on Windows 10, and dotnet new templates fixes.
– @iosub contributed a fix to the native TimePicker control for Android not showing up properly
– @trungnt2910 contributed a fix for the FileSavePicker on WebAssembly for not providing proper file extensions
– @workgroupengineering contributed a fix for the Visual Studio extensions to enable automatic installation of core pre-requisites, which will help those of you completely new to the .NET ecosystem to set up a project.
– @pkar70 contributed implementations for common WinRT classes
To all our contributors: Thank you!
Best of the Rest
– WebAuthenticationBroker for Android
– Project Reunion 0.5.5 support
– Over 50 bug fixes around x:Bind, FileSavePicker, Pointers, TextBlock, XAML Generation, Shapes, Android Navigation, and many others that you can find in our GitHub release notes
– 29 smaller new features added which enrich Uno Platform support for WinUI controls.
Jerome Laban, CTO, Uno Platform on behalf of whole Uno Platform team.