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.
- The first preview release of the Linux and Windows 7 support using a new Skia rendering backend. We’ve already started using it on the Uno Calculator, and it’s looking great!
- The WinUI 2.x
TabView
andTreeView
controls for Skia and WebAssembly, the other platforms are coming. (Thanks @MartinZikmund) ScrollViewer
XAMLScrollBars
for WebAssembly and Skia- Improvements to the VSIX/dotnet new updates, such as new item templates in the VS,
.vsconfig
support to suggest VS features to install, and Skia Backend templates. - The support for
StorageFile.GetFileFromApplicationUriAsync
, to use large assets packaged with the application, something particularly useful in the WebAssembly context. - The WinUI
ColorPicker
support (iOS/Android) (Thanks @robloo) - WebAssembly support for
Canvas.ZIndex
- Support for
x:Bind
plain C# objects bindings, as well asBindings.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 brushes- Fixes for
NavigationView
navigation items binding - Voice over support for WebAssembly
And finally, the whole new Prism 8 templates updates for the dotnet new
experience.
Here's the detailed change log for this release:
Features
- dependecyproperty: New internal obj.GetValueForEachPrecedences(prop) for tests and diagnostics c6605d7
- Droid: Enabled TextBox.CharacterCasing a0d714c
- Add one-line method to set native frame navigation styles b228b16
- Add welcome page for vsix, set UWP as startup project 8995335
- Initialize property respecting platform spec 28640cc
- PhoneCallHistory common structs d482bbb
- TextBox add partial method 2e24ba8
- ToastNotificationActivatedEventArgs structs for all 8838300
- Updated default value to match UWP fdda6c5
- PointerCursor: Support for WPF & GTK eed57c3
- pointers: [Skia] Enable hit test caching (perf) 5da4d00
- pointers: [Skia] Fix the stale branch detection while hit testing c1f9755
- pointers: [Skia] Use the already existing bubbling algorithm for pointer 17c81a4
- pointers: Add ability to aggregate intermediate elements while wlking the tree to compute the transform from an element to another one 3be13e4
- pointers: Add element hit test cahcing 5bfae6c
- pointers: Enable hit testing caching 2903573
- pointers: Enable ScrollBars on Skia 7e5c387
- pointers: First working implementation of managed event dispatch with valid OriginalSource detection c6aa81f
- pointers: Remove broken hit test element caching c246b01
- scrollviewer: Restore the managed ScrollBar in default ScrollVirwer template for WASM 7d0e40c
- skia: Add support for netcore3.1/5 in Skia.WPF e2d4eb2
- skia: Add support for WriteableBitmap 8da3a80
- storage: [Android] Add support for GetFileFromApplicationUriAsync 55d300d
- storage: [ios/macos] add support for
StorageFile.GetFileFromApplicationUriAsync
80262f0 - storage: [Wasm] Add support for GetFileFromApplicationUriAsync d3bc03a
- vsix: Add
ContentDialog
,Resource
,CustomControl
andUserControl
VS 2019 templates. c2ca533 - vsix: Add support for .vsconfig file for dotnet new and vsix bf463fa
- vsix: Include Skia targets fde903c
- WASM: Enable A11y voice over capabilities 8b2dbc6
- WASM: Set a11y properties all the time 2c126b4
- WASM: Set both a11y attributes at once 978669f
- WASM: update role finder method ec46a0e
- wasm_zindex: Added support for
Canvas.ZIndex
to Wasm platform b857844 - xf: Update X.F templates to use 4.8 release 9b05b58
- Contact support struct/enums c48be37
- CoreApplicationView.CoreWindow property 800ac7a
- more fields in Geoposition (on Android) 81fbb8d
- calendar: Update support for Calendar formatting and others f8cf74d
- skia: Fix element not removed from the visual tree and Unloaded event never invoked 3f273fe
- xbind: Add support for x:Bind to POCO, performance improvements. 2cb22f7
- [Skia] Add CrossRuntime library support e67d672
- Add CancellationToken propagation da5d8aa
- Add HAS_UNO for non uap targets 6bbcaec
- Add includeCurrent flag to FindFirstParent() e9f0c36
- Add Skia (Gtk/Wpf) unoapp heads in
dotnet new
0c6a958 - Add support DataTemplate is container host 49c46f4
- AppModel-Background-struct 87f2cc8
- Finished implementation of TreeView class 80cc015
- Finished TreeViewViewModel implementation f9cf8f8
- FolderPicker on macOS ea28b8d
- implementation of CalendarDatePickerDateChangedEventArgs 12aeca1
- Implemented SelectedItemsVector and SelectedTreeNodeVector de9e4a3
- Updated MUX package for UWP samples app ffb65fb
- AutomationPeer: Add methods with default return values 9274560
- BadgeNotification: iOS support 63811aa
- BadgeNotification: macOS support 949608b
- ColorPicker: Add ColorConversion, Hsv & Rgb structs 95a4bd1
- ColorPicker: Add ColorPicker control including ColorPickerSlider 16fc608
- ColorPicker: Add ColorSpectrum control bb2d504
- droid: Add support for InvokeScriptAsync on WebView 9c494cb
- iOS: Add support for InvokeScriptAsync on WebView 8c8fdb8
- macOS: Update src/Uno.UI/UI/Xaml/Controls/ScrollContentPresenter/NativeScrollContentPresenter.macOS.cs 3415d38
- NSUImageExtensions: added monochrome image recoloring for macOS 3d112d6
- shared: change the winjs font for a new fluent style font cda7703
- Symbol: Add missing symbols ce04184
- Tizen: Initial target support 9ac9460
- wasm: Added .ShowLocalVisualTree() for wasm platform 42b5c47
- Throw appropriate exception when obtaining location without permission 92af4f2
- TimeTrigger (struct) f605056
- ToastNotification and NotificationMirroring definitions ab317b0
- UserProfilePersonalizationSettings on Android 3634888
Bug Fixes
- dependencypropertyprecedence: Changed the precedence override to use a stack instead of a single field. d7e0822
- Droid: Remove multiple partial implementation 49f2ae5
- iOS: Remove warnings when building the iOS head 7ac08e5
- skia: Adjust visual clipping for
ScrollViewer
6a3839b - style_precedences: First setter on a style were applying its value on the target using the "Local" precedence. 388b162
- [iOS] [Android] Prevent Render() method from reentering 163128a
- Handle NullExtension in XAML code generation 25a08ce
- skia: Hide Visuals for zero arrange, reduce refresh load f8818db
- [WASM] ContentPresenter.Background re-renders when Color changes 13f3aa2
- Drawable error message made more clear 1f3c00f
- Fully quality BindableMetadata generated types aad95fe
- TextBox.VerticalContentAlignment 40fe514
- combobox: [iOS] Fix memory leak c85f2a3
- ContentDialog: [iOS] Fix memory leak 623c02d
- fips: Use SHA256 for sourcegenerator path hashing c83223b
- ListViewBase: Item container indices not updated on insert/remove 80ebd54
- ListViewBase: Item container indices not updated on insert/remove ebdca5d
- macOS: exception on Scrollview contentchanged 709b988
- NativeApplication: don't call OnLaunched again if app is already running (i.e. when focus is regained) f3ba2b6
- net5: Fix for net5 source generation nullable references support 671947f
- publish: Fixes publish to azure may fail with locked files c02eae2
- samples: Ensure the app can finish even in exceptional cases a769295
- skia: Adjust error handling for skia samples run 675dcd4
- skia: Fix content file deployment from VS d4eae5f
- skia: Remove inner visual from panel on element removal 6bd6a03
- skia: Remove NotImplemented on FrameworkElement.Dispose() 9c372eb
- TemplatePool: Fix TemplatePooling may still be active when disabled 5e11ee0
- test: [Wasm] Adjust WindowHelper.WaitForIdle to actually wait for idle c000291
- TextBox: fixed multiline textbox height not scaling properly on wasm c586e09
- Add documentation for add reference issue in cross targeted project ec998aa
- Add workaround for intellisense issues in the Android project 155d124
- Added MUX styles to run Samples on Windows 735ca30
- Don't propagate DataContext via Border.Child 0dc34bd
- Fix Slider thumb not visible when Value is at maximum b9d0083
- move ListViewItem.cs to Controls folder ea379ce
- Update Shape.Fill when LinearGradientBrush gradient stops change 947d2dd
- analyzers: Analyzers may not show the proper status using the reference API c58565e
- combobox: PlaceholderText not displaying c4c1109
- doc: updating font doc is easier to read 37bcfef
- NavigationView: toggle pane button width when light-dismissed 21b3bdc
- shapes: [Skia] Adjust shapes path alignment given StrokeThickness a28763f
- skia: GridView panel is now a WrapPanel 11c8636
- skiawpf: mouse wheel was too fast f08631f
- TextBox: [iOS] Fix memory leak cf7b2f0
- theme: Ensure resources backed by StaticResource aliases update correctly 0d61ca9
- theme: Update theme properties set by implicit styles correctly f42835f
- tooltip: Fix tooltip popup panel created too early 3473a4d
- Correctly initialize value of GeoCoordinate.Point on Android debca91
- Fix bug where ResourceDictionary with only ThemeDictionaries would not be generated 6bb8694
- ColorPicker: Add partial modifier to ColorChangedEventArgs 3dfc1ae
- Materialize certain ResourceDictionary entries eagerly 44e1758
- ColorPicker: Corrections in System.Threading 9563227
- ColorPicker: Fully qualify ToolTip for macOS c208c90
- Selector: fixed IsSelected not working on Selector and ListViewBase items ef26819
- sourcegen: Correctly evaluate UseWPF b2ea6a8
- xaml: Reduce size of AOT'ed compilations from Xaml b6380f0
- [Android] Geolocator should detect permission when app resumes 1a06aca
- Apply proper TreeViewItem indentation a437d2f
- Bump Wasm Bootstrap for uno-app default afea3db
- Disable parallel query on WASM 20b1786
- Disable recent samples caching while in release 3ae3bf8
- Executing OnPropertyChanged, Style incompatibilities, vector behavior alignment 5a44136
- Fix rebase issue b617eab
- Fixed samples app compilation due to generators 69189ba
- Fully qualify Window reference for iOS 4ab7915
- Loading event might not be invoked if alement added in visual tree while invoking the Loaded of its parent cb4f6fc
- Make sure the Loading event is not raised twice bb58a81
- Make sure to invoke OnApplyTemplate if setting the template after control has been loaded 89dcd85
- Perform app initialization only for ApplicationActivity d282a4f
- displaymemberbar: Removed DisplayMemberTemplateSelector, replace with a real solution similar to what UWP/WinUI is doing 7e2ab4e
- ListView: Update SelectedIndex on selection via container 704399b
- page: Page is the only UserControl which draw its own Background 964c2a2
- scrollBar: Make sure to unsubscribe from events on Unload + restore managed scroll bars in default ScrollViewer template for wasm ae4ddfe
- scrollViewer: Fix memory leak when SV used with managed ScrollBar b8ca32c
- wasm_insert: [Wasm] Ensure DOM & Managed visual tree are synchronized after using Children.Insert() on a Panel. 89b4354
- Geolocator methods invoked on Dispatcher when necessary e67e139
- HighContrast and Light reveal brushes now match UWP 56ee223
- Properly implemented TreeView events and ItemsSourceView ecb8b09
- Schedule InitializeIfPermissionIsGranted on the dispatcher 7f29597
- Support Add() in ArrayList when Capacity is not set before daad101
- skia: Add default implementation for
AnalyticsInfo
a21ed13 - unix: Adjust
ApplicationData.Local
path to use proper locations under unix c53e429 - return empty collection when expenting a IEnumerable d97dc73
- Updated a lot of typos 74ca2b2
- textbox: A binding on the
TextBox.Text
property were always treated as aTwoWay
binding. d2b0b80 - textbox: On WASM, the CornerRadius is not applied on the TextBox's background
<Border>
. 2e08a70 - vsix: Properly support solution unload and timeout on nuget failure 9f79917
- build removing unnecessary async a60e333
- Check for ValuePatternIdentifiers existence before usage 745a898
- Fix incorrect implemented list for
CoreWindow.PointerCursor
563f6ff - clipping: Fix GH652 - Problem with clipping on both Wasm & Skia 703242b
- clipping: Fixed dynamic .Clip Rect were broken in recent clipping changes. 540423d
- DatePickerFlyout: [iOS]
DatePickerFlyout.Date
is not populated properly 1c271b5 - dotnetnew: Add default root namespace for cross-runtime libraries 55d9d79
- dotnetnew: Fix WPF Skia Host package version replacements f597223
- dotnetnew: Remove temprary workaround in Skia template 738c5de
- dotnetnew: Tentative adjustments for VS 2019 integration fe212bf
- macOS: casting issue 467002f
- macOS: templated control not attaching events 1a2a157
- net5: Fix the generation of .deps.json file 532aae9
- rect: implicit casting of string to Rect were not protected against null-ref exceptions ca7cc49
- skiawpf: Improve the wheel smoothness a66ee03
- slnf: Fix missing project in solution filters 8a7edd0
- theme: Update animation-filled values when theme changes 232d8c7
- timepicker: Fix timepicker flyout NRE when unloading 106ab50
- wasm: Some CSS values were not using culture independant serialization. 29dcc78
- xaml: Make ResourceDictionary.Source lookups case-insensitive ab0c986
- [Android] Broadcast status after requesting access 441925d
- [Android] Permit geolocator subscription before permission 82c1427
- Disable currently unsupported code 1db40b1
- Do not ask permission in Geolocator.ctor 93db8f6
- Listen to hinge angle sensor properly b91d655
- Update cross-target library uap version to 17763 160fdb7
- Update src/Uno.UI/UI/Xaml/Controls/WebView/WebView.Android.cs d4b853c
- Use MathEx.Clamp() to support .net standard 2.0 dda9adc
- Use Task.Run() instead of ThreadPool.RunAsync() edb5e68
- skia: Assets may not be copied properly to the output or publish folder e37c0e8
- Fully qualify Window for iOS/macOS 308ef6c
- Remove changes to Uno.UI project file 96a3217
- Remove Math.Clamp() to support .net standard 2.0 40bc0c1
- wasm: lineheight is applied to textblock 3491612
- wasm: splash screen now respects aspect ratio d1d5448
- Allow setting title before window becomes key 74e3880
- Pivot ItemsSource binding f5921bd
- Pivot SelectionChanged event 59cf2a8
- Use template SourceName instead of old template parameters 8f41371
- validate for null 4b7a9d0
- NSUImageExtensions: fixed image monochrome recoloring on ios cd16da2
- shared: update solution template to include checkbox fixes cd7c013
- ToggleMenuFlyoutItem: added DefaultStyleKey so that the correct style is used 4994148
- [Wasm] Don't use Assemly.Load in ApiInformation 67a554e
- Exclude ResourceDictionary to improve linkability of
XamlControlsResources
597ca36 - Reduce the use of
Assembly.Load
during startup 39f4ffb - textBox: Fixed Dark mode for fluent textbox 58eef71
- transforms: [MacOS] Fix support of RanderTransformOrigin 36a5eaa
- UnoLibrary template creates a valid project 45c2f5b
- update to AndroidX to match the standard Uno Template fe2ec48
- Use Uno specific chevron symbol for collapse/expand in TreeView a60a0af
- wasmxf: Wasm XF template didn't build c30d4bc
- xbind: [iOS/macOS] Fix memory leak when using x:Bind b93e205
Performance Improvements
- Add new ArrayList to avoid extra copy creating bitmaps f97af39
- Reduce generated code size for BindableMetadata and DependencyProperty 9296796
BREAKING CHANGES
- shared: the symbol font (winjs-symbols) has changed and the new one (uno-fluentui-asset) should be used.