Build Mobile, Desktop and WebAssembly apps with C# and XAML. Today. Open source and professionally supported.
This newest release brings support for .NET 6 (for iOS, Android, mac Catalyst and macOS), support for Visual Studio 2022 templates, WinAppSDK 0.8.1, Focus management updates, a XAML Trimming feature to reduce the size of WebAssembly apps by nearly 50% as well as many other improvements and bug fixes.
For more details about this release, take a look at our blog post.
We've closed many other issues and added other features, and as always thanks to our contributors!
.Bounds
support for some Geometry
implementations. (ee6ed7f).Union
on Rect
class. (2425c81)CalendarDatePicker
were wrongly makred as not implemented. (ad89368)dotnet new
templates from VS 2019 new projects dialog (0ac2570).DispatcherQueue
(2cf2a01)The new 3.8 release ports additional WinUI controls and layouts, such as the often-requested CalendarDatePicker
control, to all Uno-supported platforms getting us one huge step closer to realizing the #WinUIEverywhere vision.
In addition, the new release brings up to 2x performance improvements in some scenarios, realized from the new Grid
implementation as well as DependencyObject
and UI Elements creation improvements. We also introduced new AOT and WebAssembly features, built on top of recently released Microsoft work on .NET.
On the Linux front we are pleased to enable new scenarios so you can target embedded systems using the FrameBuffer as well.
In addition to new UI and Performance features and improvements, the team has closed many issues. Closing issues timely is crucial in further fueling large projects enabling customers like Kahua to port a massive line of business applications from desktop to Web. We are particularly proud of the fact that with every release we close more issues than have been opened in the previous period; it shows a healthy and quickly maturing open-source project. Our huge thanks go to all our contributors @xperiandri, @crixerker, @mterwoord, @scolapicchioni, @trungnt2910, @johnthepro and @pkar70!
See all the detailed updates in our blog post.
.ShowLocalVisualTree()
by adding details about Grid/Canvas positioning. 96b8086[Skia] Remove weak registrations in UIElement constructor e84146f
[Wasm] Don't deserialize unused TS interop output 52f5b5d
[Wasm] Improve UIElement.Visibility
set to Collapsed
0be67af
[Wasm] Improve SetBackgroundBrush performance 14d996e
[Wasm] Improve text set color 07c794b
[Wasm] Register on ScrollContentPresenter pointer events only when native d25f9cc
[Wasm] Restore conditional DO hard references b968add
Add various controls creation benchmarks 1de5dac
Build only one logger for static style methods f4651c9
Explicitly limit DependencyPropertyDetail array pool max length 34923c4
Generate Brush.Opacity
and RelativeTransform
DPs 516fbb6
Improve DependencyPropertyDetails performance 640a543
Initialize UIElement.KeyboardAcceleratorsProperty
lazily 61c4223
Make Grid.RowDefinitions
and ColumnDefinitions
lazy initialized feaad83
Make VisualState and VisualTransition lazy loaded 64a79fc
misc performance improvements on DependencyObjectStore
9c01d26
Move all UIElement TextHelpers to UIElement c1a776b
Push active system theme to ResourceDictionary 2322829
Reduce foreach/linq usage in pointers management d5b622a
Remove unused WeakReference read-back on creation 6cfe4c8
Skip ClearPointersStateIfNeeded during ctor 7d74f48
Use cached DependencyProperty comparer 6ef9e81
grid: Added more cases to Grid benchmark 3ae96b1
VisualState: Create VisualState.Setters
and StateTriggers
backing collections lazily 5c14003
Use for loops in DependencyObjectCollection 0f64934
grid: Added a new multidimension test to grid. 53b3618
fix!: Exclude Windows.UI.Xaml.UIElementExtensions from Xamarin platforms 3cbea4f
SetToMin()
/SetToMax()
were used in multi-eras calendars 9549557{x:Null}
syntax 1a6c2fdUno.UI.Runtime.Skia.Gtk
and FrameBuffer
aaf1809#
497ffa6[ActivePlatform]
in UI Tests works with NUnit's [TestCase]
d4ab54cSetter
is being refreshed on ElementNameSubject changes b48bf0fUno Platform 3.7 expands our support for the newest WinUI, Project Reunion and Linux, all while continuing performance improvements for WebAssembly head.
This release includes:
SwipeControl
TextBox
supportWebAuthenticationBroker
for Androidand many contributors updates:
To all our contributors: Thank you!
For more details, visit our blog post.
<TextBlock>
were not properly displaying the ellipsis on text overflow, because the CSS requires the overflow: hidden to be applied. 160a506The wait is over! The next generation Windows developer platform – WinUI 3 – has been officially released to the public, alongside Project Reunion 0.5. To empower you to have #WinUIEverywhere on the day it launches we are also releasing Uno Platform 3.6. Our appreciation goes to Microsoft WinUI team for keeping us posted on your progress, in order for us to have day-0 support for WinUI.
In addition to WinUI and Project Reunion support, we are also releasing highly-requested DatePicker and File Picking controls (Open, Save, Folder), a new Cupertino-like theme, OpenId Connect, WebAuthenticationBroker
and are continuing support Windows Community Toolkit and its newest release - 7.0! Lastly, we have restructured and added more documentation to our docs – one of the main improvements you asked for in our annual survey.
For more details, read the full release blog.
Here are some of this release features and improvements :
FileOpenPicker
, FileSavePicker
, FolderPicker
support (@MartinZikmund, @Arlodotexe)ApplicationLanguage.PrimaryLanguageOverride
(@carldebilly)DatePicker
and LoopingSelector
(@carldebilly)WebAuthenticationBroker
and OpenID Connect support (@carldebilly)DispatcherQueue
(@carldebilly)ScrollViewer
(@dr1rrb)ApiInformation.IsTypePresent
in conditional Xaml (@davidjohnoliver)ScrollViewer
for macOS (@dr1rrb)ResourceDictionary
performance improvements (30% improvement on worst case read) (@jeromelaban)BindingPath
performance and allocation improvements (@dr1rrb)And many bug fixes, with some highlights:
Here's the extended changelog:
This will change the default behaviour on how the Foreground property of the CommandBar is handled and applied against the different elements of the CommandBar
Staying true to our #WinUIEverywhere mission, our 3.5 release provides day-zero support for WinUI 3 Preview 4 and it brings support for 4 new WinUI controls – Navigation View, Progress Ring, Pager and Expander. In addition, we are solidifying our existing support for SkiaSharp and Xamarin.Forms 5.
Read our blog post for more details about this release.
Calendar.YearAsString()
and Calendar.YearAsTruncatedString()
4a31447dotnet-new
classification to dotnet new templates 23f8ebbThis 3.4 release is about adding support for WinUI controls, such as the hierarchical NavigationView, InfoBar, RadioButtons, ItemsRepeater and determinate ProgressRing. We are following the footsteps of the WinUI team to align more of the controls Uno provides with what is supported on Windows.
The combination of controls we are releasing with 3.4 release, the recently-announced Infragistics controls for Uno Platform, and Syncfusion charting, will give you as a developer a great toolset to tackle single-source web, desktop and mobile applications.
As with each release, we have also added significant number of features and fixed many bugs, with the help of members from the community.
Visit our blog post for additional details.
Uno Platform has been including a version of the Navigation for quite a while in the Windows.UI.Xaml namespace. Recently, the WinUI team added support for an enhanced experience including hierarchical navigation, with the ability to expand and collapse menu items.
This new control is now available in the Microsoft.UI.Xaml namespace, to match with the Windows version of WinUI. The Windows.UI.Xaml version of the control will stay in Uno, but will not include additional features, only bug fixes as needed.
You can browse the documentation for the NavigationView on Microsoft docs.
The WinUI InfoBar control also has been imported in Uno Platform. It allows for applications to display app wide status messages to the users to be highly visible but non-intrusive, using customizable severity levels. Here is an example of InfoBar visual:
You can browse the documentation for the InfoBar on Microsoft docs.
Yet another WinUI control, this time to allow the DataBinding of an items source to a list of RadioButtons, this control lets users select one option from a collection of two or more mutually exclusive, but related, options.
You can browse the documentation for the RadioButtons on Microsoft docs.
The ItemsRepeater is a new control from WinUI 2.x that provides an enhanced developer experience and end user experience when creating custom collection experiences using a flexible layout system, custom views, and virtualization.
We have ported the code from the ItemsRepeater to Uno, and it is useable on all our available platforms. It is used in Uno by the refreshed hierarchical NavigationView control, as well as the RadioButtons control.
Layouts are reusable components for which some (StaggeredLayout, WrapLayout) were released in Windows Community 6.1. Uno did not have support for the ItemsRepeater
at the time, but those will be available soon to be reused in Uno.
You can browse the documentation for the ItemsRepeater on Microsoft docs.
WinUI 2.5 added support for a determinate mode for the progress ring, allowing for an arbitrary progress value to be provided. This control uses Lottie under the hood, and benefits from additional changes we included to get color changes in Lottie files.
You can browse the documentation for the ProgressRing control on Microsoft docs.
There are no breaking changes for this release of Uno, but you'll need to upgrade the Uno.Core package to 2.1 in the UWP project to avoid nuget restore warnings.
This upgrade has been introduced to improve the compatibility of Uno.UI with Visual Studio 2019 16.9 Previews.
You can view below the full changelog of this release
WinUI 3.0 Preview 3 is a big step towards shipping the final version of WinUI.
We at Uno Platform team are happy to report that Uno Platform already works with the latest WinUI preview. Our sincerest thanks to WinUI team who keeps us posted on their progress and allows us to make modifications to Uno so that our joint developer base can use the latest and greatest bits right away.
In addition to shipping support for Preview 3 the team also managed to ship additional features in our 7th release in 2020.
We’re aligning the API surface from WinUI 3.0 Previews in Uno, alongside adding support for the WinUI Desktop project template. The Desktop template enables WinUI applications to use the full Win32 and WinRT API with .NET 5, without running in the UWP sandbox.
To create an application using the WinUI 3 API set, run the following command:
dotnet new -i Uno.ProjectTemplates.Dotnet
dotnet new unoapp-winui -o MyApp
This will create a brand-new project to experiment with WinUI 3 Preview 3 and Uno.
You can find up-to-date information about dotnet new templates in our documentation.
A few points about the WinUI 3 Preview support:
Uno is now providing Android 11 support and deprecates the use of Android 9, which Google stopped supporting as of November 1st. If your application was targeting the API level 28 (Android 9), you can upgrade to Android 10 (Level 29) or 11 (Level 30) in your application’s property pages.
Keyboard was a big ask from the community, and the first consumer of this feature is the Uno Calculator for Linux. We’ve updated the Snapped application to enable keyboard support to input numbers and operators.
We've also updated our appimage support for the Linux Calculator, in case you're on a distribution that does not support snap, or snap is not installed.
To upgrade to latest release of Uno Platform please update your packages to 3.3 via your Visual Studio NuGet package manager! If you are new to Uno Platform, the best way to get started is following our official getting started guide.
Here's the full changelog:
CoreWindow.[KeyUp|KeyDown]
and UIElement.[KeyUP|KeyDown]
(0e89271)<Application.Resources>
<MapResources xmlns="using:Uno.UI.Maps"/>
</Application.Resources>
This resource dictionary provides the required MapControl style.
The 3.2 release is loaded with feature and performance improvements. Most of the release focused on upcoming .NET 5 and all benefits Uno Platform gets from building on top of it. However, we are also releasing improvements to the controls and tooling we introduced in previous releases.
The .NET team has been working hard to add WebAssembly support for .NET 5, and we’ve been able to leverage this work to update Uno and provide a preview of this support.
This update gives the ability for Uno Platform apps to use the .NET 5 APIs and features, like C# 9.0 and its source generators, records, pattern matching and others interesting features.
But that’s not all! The .NET 5 WebAssembly support comes with the IL interpreter runtime, but also brings the AOT support that was already present in the Mono Runtime that Uno Platform currently uses, allowing Uno WASM implementation a performance boost of 7-15x compared to the IL interpreter.
To get this support, the Uno WebAssembly Bootstrapper has been updated to include the AOT runtime for .NET 5, while keeping the support for the Mono 6.x WebAssembly support (using the netstandard2.0 target framework for projects).
You can view additional benchmarks on our blog post.
Drag and drop elements within the application is now supported. Like UWP, any element flagged with the CanDrag
property set now has the ability to build a DataPackage
and customize the UI for the drag operation. Any element configured with the AllowDrop
flag can now receive the drag events.
We’ve also added the ability to drag and drop from and to other apps for Skia for Windows and macOS (Thanks @robloo!).
We’ve updated the Uno playground with new samples for you to experiment with:
You can now use the muxc”
namespace to access Microsoft.UI.Xaml.Control
enabled controls.
AnalyticsInfo
, PackageId
(Skia/Wasm)StorageFolder
: GetFilesAsync()
, GetFoldersAsync()
, GetItemsAsync()
(Thanks @pkar70!)UISettings
GetColorValue
and AnimationsEnabled
(Thanks @MartinZikmund!)Windows.Storage.PathIO
and many Windows.Storage
APIsYou'll find below the full changelog:
The 3.1 release is our 6th release in 2020! In our 2019 survey you had asked to release more often and we hope we have delivered.
In year 2019, we had a total of 4 releases and in 2020 we are already up to 6. We also hope to have at least one more release by the end of the year!
The 3.1 release is special not only because of the new scenarios it unlocks, but also because of significant community contributions we are able to ship – thanks a lot to @robloo, @DanSiegel and @MartinZikmund for your contributions.
For this 3.1 release, we were able to add over 70 features and close over 140 code and documentation issues. Let’s unpack the release.
TabView
and TreeView
controls for Skia and WebAssembly, the other platforms are coming. (Thanks @MartinZikmund)ScrollViewer
XAML ScrollBars
for WebAssembly and Skia.vsconfig
support to suggest VS features to install, and Skia Backend templates.StorageFile.GetFileFromApplicationUriAsync
, to use large assets packaged with the application, something particularly useful in the WebAssembly context.ColorPicker
support (iOS/Android) (Thanks @robloo)Canvas.ZIndex
x:Bind
plain C# objects bindings, as well as Bindings.Update()
Windows.Globalization.Calendar
updates, paving the way for Date and Time pickersFolderPicker
support for macOS (Thanks @MartinZikmund)BadgeNotifications
for Android and iOS (Thanks @MartinZikmund)Page
supports background brushesNavigationView
navigation items bindingAnd finally, the whole new Prism 8 templates updates for the dotnet new
experience.
Here's the detailed change log for this release:
StorageFile.GetFileFromApplicationUriAsync
80262f0ContentDialog
, Resource
, CustomControl
and UserControl
VS 2019 templates. c2ca533Canvas.ZIndex
to Wasm platform b857844dotnet new
0c6a958ScrollViewer
6a3839bAnalyticsInfo
a21ed13ApplicationData.Local
path to use proper locations under unix c53e429TextBox.Text
property were always treated as a TwoWay
binding. d2b0b80<Border>
. 2e08a70CoreWindow.PointerCursor
563f6ffDatePickerFlyout.Date
is not populated properly 1c271b5XamlControlsResources
597ca36Assembly.Load
during startup 39f4ffbHere's the amazing Uno 3.0 release, again packed with features, bug fixes and performance improvements.
This release is also the first in a long time to introduce binary breaking changes, yet with minimal behavior and code breaking changes. Rebuilding your application using Uno.UI 3.0 will generally be enough, with a few adjustments to the configuration. You can visit the documentation for more information.
Among the major features:
ScrollViewer
improvements, such as XAML ScrollBar
ResourceDictionary
and implict styles updatesDisplayInformation
support for DPI and orientation changesMidiInPort
support (iOS, Android, WebAssembly)AnimatedVisualPlayer
), SplitButton
x:Bind
support for eventsFileIO
updates to support Buffer
, DataReader
, DataWriter
CustomXamlResourceLoader
and CustomResource
NetworkInformation
and statusWe've also improved the performance of the DependencyObject
and DependencyProperty
classes, making it faster for code accessing dependency properties by their C# accessor through caching and O(1) property access.
You'll also notice below a large set of changes related to the addition of the Skia backend, which are to be released in preview for Uno.UI 3.1 as we add new features. The changes for the support of Skia largely impacted the support for WebAssembly, making it a good choice to include in Uno 3.1 and avoid including breaking changes. These changes include the introduction of the Uno.UI.WebAssembly
package that needs to be added to the head WebAssembly project. For more information visit the documentation.
On the breaking changes front, for which most of the code will not be affected:
UIElementCollection
and Panel.Children
. Some elements such as Image
are now getting the appropriate base class.INotifyPropertyChanged
() => new App()
lambdaHave fun with Uno 3.0!
dotnet new
74d2518dotnet new
605d9a6FadeInThemeAnimation
+ FadeOutThemeAnimation
. 9d3da6eApplication.Suspending
8fa27db, closes #1165 #3120CustomResource
markup and CustomXamlResourceLoader 2020be3Promise<string>
and awaits it. dede46ddotnet new unoapp-winui
support 095fe86stackalloc
clauses has been move out of loops to prevent leaks, per Standard ECMA-334 Standard december 2001, section 25.7. 7209448On Android only, the NativeScrollContentPresenter continues to implement IFrameworkElement, since it uses the Layouter to arrange its children which is tightly coupled to IFrameworkElement.
INotifyPropertyChanged
interface on your class explicitly.FeatureConfiguration.Binding.IgnoreINPCSameReferences = true;
This is a one-line fix in app code (normally Main.cs):
: base(new App(),
should be replaced by : base(() => new App(),
Adjusted from GetType() to typeof(NavigationViewItem) for NavigationViewItem. This matches Win.UI.Xaml behaviour, though granted the MS.UI.Xaml code looks more like GetType().
Partial implementation of correct style handling:
This replaces the previous approach (only a single copy of a resource was possible/permitted per app).
Uno's new approach doesn't exactly match UWP (parse-time XAML scope resolution), instead it uses a 'two-speed' approach where the lookup is made in App.Resources when the XAML is initialized, and then again at load-time based on the resources in scope in the local tree.
<UnoSkipUserControlsInVisualTree>true</UnoSkipUserControlsInVisualTree>
IFrameworkElement
0508640__WASM__
a8ecb66localStorage
ab8d2a0, closes #2923.Play()
) before being loaded, a concurrency issue was preventing the animation from starting once loaded. 01a4bddSystemErrorTextColor
was not of right color on Light
theme (yellow instead of red). 9d167f5