Uno Platform v3.1.6 Release Notes
Release Date: 2020-10-23 // over 3 years ago-
π 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 pickers - π
FolderPicker
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.