Uno Platform v3.0.5 Release Notes

Release Date: 2020-08-12 // over 3 years ago
  • ๐Ÿš€ Here'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:

    • ๐ŸŽ Acrylic Brush support for iOS, Android, macOS and WebAssembly
    • Many ScrollViewer improvements, such as XAML ScrollBar
    • ๐Ÿ’… Themeing support, with ResourceDictionary and implict styles updates
    • ๐Ÿ’… Fluent Styles from WinUI 3.0
    • ๐Ÿ‘ DisplayInformation support for DPI and orientation changes
    • ๐Ÿ‘ The inclusion of WinUI 3.0 API set support (Preview 2)
    • โšก๏ธ macOS support updates (Shapes, Keyboard, MediaPlayer, ...)
    • ๐Ÿ‘ MidiInPort support (iOS, Android, WebAssembly)
    • ๐Ÿ‘ MSAL.NET support for WebAssembly
    • WinUI ProgressBar (based on AnimatedVisualPlayer), SplitButton
    • ๐Ÿ‘ x:Bind support for events
    • โšก๏ธ FileIO updates to support Buffer, DataReader, DataWriter
    • โšก๏ธ Clipboard reading and writing updates (iOS, Android, macOS, WebAssembly)
    • ๐Ÿ‘Œ Support for CustomXamlResourceLoader and CustomResource
    • ๐Ÿ‘Œ Support for NetworkInformation and status

    ๐ŸŽ We'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:

    • ๐ŸŽ On iOS/Android/macOS, ee aligned the APIs that Uno used to incorrectly type as native views, particularly with UIElementCollection and Panel.Children. Some elements such as Image are now getting the appropriate base class.
    • UIElement now no longer provides a implementation of INotifyPropertyChanged
    • โฌ†๏ธ We removed the support for the deprecated Android 8.0. Make sure to upgrade to Android 10.0.
    • If you have an existing Uno 2.4 or ealier application, make sure too adjust the Application constructor to include the new () => new App() lambda
    • ๐Ÿ’ป Many other binary breaking changes that require the rebuilding of the libraries that depend on Uno.UI.

    Have fun with Uno 3.0!


    ๐Ÿ”‹ Features

    • ๐Ÿ‘ [Skia] Add CrossRuntime library support a6c9824
    • โž• Add Skia (Gtk/Wpf) unoapp heads in dotnet new 74d2518
    • AcrylicBrush: First Android version 4a291e7
    • AcrylicBrush: First iOS implementation 98ebcb4
    • AcrylicBrush: First macOS implementation 17ea8a5
    • AcrylicBrush: First WASM implementation 4dd994f
    • dispatcherQueueTimer: Add support of the IsReapeting property 556e4ae
    • FileIO: WriteTextAsync and AppendTextAsync fcee9b7
    • ๐ŸŽ macos: [MacOS] Add clipping support 1c8a0ad
    • pointers: [Skia] Add support for key modifiers and improve support of horizontal scrolling (including shift+wheel) 5b9bc79
    • scrollViewer: [Skia] Add support for SV.ChangeView (and scroll bars!) d79c9fd
    • scrollViewer: Add style that uses the native scrollbars fcdc215
    • scrollViewer: Add support of managed ScrollBar in ScrollViewer efcc30f
    • scrolViewer: Implement SV vsiual states (used to render managed scroll bars) 6fe45f1
    • skiawpf: Added required extensions for Skia.Wpf with naive implementations 5f6a4b5
    • skiawpf: Added support for command-line arguments cafc618
    • skiawpf: Added support for FontWeight, FontStyle & FontStretch. Works only with Font Families, not when specifying font file directly. 03698ab
    • skiawpf: Added support for Full Screen mode 64adca7
    • skiawpf: Added support for Horizontal Mouse Wheel 108aedd
    • skiawpf: Added support for pointers - first working version. 9801c51
    • skiawpf: Added support for Window Title ea5e7f8
    • ๐Ÿ’… styles: Add XamlControlsResources, add compact resources ecb1868
    • ๐Ÿ’… styles: Import Fluent styles from WinUI 16639c9
    • theme: Limited support for FrameworkElement.RequestedTheme b543db1
    • wasm: add the FileSavePicker which caches a file in the browser and downloads it when modifications are done. 5c19363
    • wasm: Added GetHtmlAttribute for an Element on Wasm. 92b0489
    • wasm: BitmapImage now supports scale qualifiers b14ee4d
    • ๐Ÿ‘ [Skia] Add scaled images support 9117af9
    • ๐Ÿ‘ [Skia] Add support for UIElement.TransformToVisual 8403fc2
    • โž• Add codespaces support 235a3d4
    • ๐Ÿ“ฆ [Wasm][Skia] Add icon and title support from package.appxmanifest dc4e7ee
    • IOS TimePicker flyout styling f4d7bbb
    • ๐Ÿ“ฆ IsApiContractPresent detects Uno.WinUI package b383c42
    • โšก๏ธ Update WASM Path on changes d06cb5b
    • โšก๏ธ Various skia updates d7dd9ce
    • TextBlock: Added TextBlock MaxLines implementation for WASM 94a3650
    • [Skia] Load fonts from local path feaec98
    • โž• Add cross-runtime library support for dotnet new 605d9a6
    • color: Applying a value to a SolidColorBrush in a style now works well as on UWP. 8c5213d
    • โž• Add support base for Skia on .NET Core dbf8aa8
    • โž• Add support for msbuild UnoRuntimeProjectReference da90b3f
    • coloranimation: First implementation of ColorAnimationUsingKeyFrames 0091a9f
    • DisplayInformation: Android OrientationChanged and DpiChanged 76dd0cf
    • DisplayInformation: iOS OrientationChanged and DpiChanged 98fef86
    • DisplayInformation: macOS OrientationChanged and DpiChanged events 06be6fc
    • DisplayInformation: WASM DpiChanged and OrientationChanged 819dfd1
    • DisplayRequest: WASM support 91d3300
    • frameworkelement: Add VisualTreeHelper.AdaptNative()/TryAdaptNative() 9bdc1a4
    • Launcher: Launch file/folder on macOS 81bd3ac
    • ๐ŸŽ macOS: Window resize, min size, size changed be6f1ad
    • progressbar: Added display of CurrentState name in sample. 3f6f1f8
    • textblock: [WASM] Added support for IsTextSelectionEnabled on TextBlock. 8ad9560
    • wasm: Add new methods to set and unset CSS classes on a HTML element. 7bac999
    • wasm: Added javascript helpers for Wasm, to allow interop with javascript after the new packaging system. b1d11d0
    • โšก๏ธ Update to WinUI 3.0.0-preview2.200713.0 b449e53
    • elevatedview: Added support for macOS df31c10
    • elevatedview: ElevatedView on Android now supports setting the shadow color. 0275d09
    • ๐ŸŽ (macOS) Add support for Shape Line a61e5a9
    • ๐ŸŽ (macOS) Add support for Shape QuadCurve f87f659
    • ๐ŸŽ (macOS) Add support for Shapes Path d480964
    • โž• Add support for INPC(String.Empty) to notify all object's properties 308eb77
    • โž• Add support for TextBlock.Foreground update on SolidColorBrush.Color changes a584e60
    • animation: Implemented FadeInThemeAnimation + FadeOutThemeAnimation. 9d3da6e
    • converter: Added CornerRadiusFilterConvert & CornerRadiusToThicknessConverter 3427e7a
    • converter: Added XAML convertion from SolidColorBrush to Color. da8eb9f
    • imageBrush: [Android] Add support for WriteableBitmap 8975be0
    • imageBrush: [iOS][macOS] Add support of WriteableBitmap 08716bb
    • imageBrush: [WASM] Add support of the ImageBrush 7af4d1e
    • listview: [WASM] [MACOS] ListView observable collection support a181d40
    • msal: Added new Uno.UI.MSAL add-in project file into solution. eb651fa
    • msal: Added support for MSAL in SampleApps of all platforms 7418302
    • progressbar: Added WinUI 2.3 ProgressBar first implementation. 195af14
    • progressbar: use WinUI template c4a3ba6
    • โž• Add Uno.UI package to UWP in templates 377612d
    • โž• Add x:Bind support for events 2b81c0e, closes #3172
    • โž• Adds the Dopes performance test ff61bc2
    • Adjust for WinUI 3.0 Preview 1 bits 91b1576
    • Buffer d418611
    • DataReader d756b36
    • DependencyProperty read/write benchmark 141aa4d
    • msal: Added a sample for MSAL+Graph 4ce9339
    • ๐ŸŽ Application.Exit on macOS cce79db
    • ElevatedView implementation for Uwp 743dbec
    • 0๏ธโƒฃ Set UnoSkipUserControlsInVisualTree to false by default 481f20c, closes #61
    • ๐Ÿ‘Œ Support CloseRequested and Suspending on macOS facc0a2
    • Theme Asset Qualifier on Android bd6c619
    • โฌ†๏ธ Upgrade UWPSyncGenerator to Roslyn 3.6.0 3a8f8b9
    • Clipboard: ContentChanged on macOS 41de59f
    • Clipboard: GetContent on iOS b83d7d2
    • Clipboard: iOS Flush, Clear and ContentChanged 73d1213
    • Clipboard: macOS support for Clear and Flush 2e6932b
    • Clipboard: Support Clear, Flush, ContentChanged on Android ec6088e
    • Clipboard: Support Flush, Clear, ContentChanged on WASM 920304e
    • Clipboard: Support GetContent on WASM b4ba967
    • Clipboard: Support storing multiple data items on Android 482b0dd
    • easing: Implemented Circle easing functions 82ab08e
    • ios: customizable MenuFlyout cancel text 36ba934
    • MenyFlyout: Add support for ToggleMenuFlyoutItem 7542b0a
    • MIDI: Support for MidiInPort on WASM 00b5159
    • MIDI: Support MidiInPort on Android 5995708
    • MIDI: Support MidiInPort on iOS b26e069
    • ๐Ÿ’… styles: [Android] [iOS] Allow MessageDialog.ShowAsync() from background 43a2189
    • ๐Ÿ’… styles: Allow native style usage to be overridden per control b0f8f86
    • ๐Ÿ’… styles: Implement 'xaml scope' resource resolution b0376de
    • ๐Ÿ’… styles: Populate Resources from XAML bd3539c
    • ๐Ÿ’… styles: Populate ThemeDictionaries defined in XAML 18240f7
    • ๐Ÿ’… styles: ResourceDictionary - support Source resolution in code-behind d4f2407
    • ๐Ÿ’… styles: Support directly assigning local Resources from Source d339ff2
    • ๐Ÿ’… styles: Support ms-appx in ResourceDictionary source fb60d0d
    • ๐Ÿ’… styles: Support resolving external ResourceDictionary.Source from Xaml bce526d
    • ๐Ÿ’… styles: Support ResourceDictionary subclasses from XAML 39cff50
    • ๐Ÿ’… styles: Support ResourceDictionary.MergedDictionaries in XAML generation 5d04d91
    • ๐Ÿ’… styles: Update ThemeResource references when RequestedTheme changes 6a4a01c
    • suspension: [Wasm] Add support for Application.Suspending 8fa27db, closes #1165 #3120
    • โœ… tests: [UnitTests] Add ShowLocalVisualTree() e2b2ac1
    • textblock: Supports HorizontalTextAlignment property. aafce62
    • themes: Observing theme changes 7726948
    • xaml: Support conditional XAML bfc4fb0
    • xaml: Support CustomResource markup and CustomXamlResourceLoader 2020be3
    • ๐ŸŽ [MacOS] Add support for keyboard events 02aa9ab
    • Implement DataWriter 07fd1e1
    • ๐Ÿ‘ Sensors return null on unsupported platforms 2daaeb7
    • ๐Ÿ‘Œ Support spaces in CornerRadius and Thickness type converters 61bd7ab
    • โšก๏ธ Update Android project template to SDK 29 6725815
    • โšก๏ธ Update Microsoft.NETCore.UniversalWindowsPlatform to 6.2.9 ab811bd
    • MediaPlayer: Support for macOS d84cd1e
    • NetworkInformation: Android connectivity 9493326
    • NetworkInformation: iOS connectivity 76d0e0b
    • NetworkInformation: macOS connectivity 238f82b
    • NetworkInformation: WASM support for network status eac4d56
    • ProtocolActivation: Implemented protocol activation on Android f6576ba
    • ProtocolActivation: Implemented protocol activation on iOS ba1f722
    • ProtocolActivation: Implemented protocol activation on macOS 72ffdc8
    • ProtocolActivation: Implemented protocol activation on WASM 1211d49
    • shapes: Improve code readibility 4b3c8f7
    • wasm: Added ability to call async javascript Promise<string> and awaits it. dede46d
    • โž• Add dotnet new unoapp-winui support 095fe86
    • โž• Add support for dotnet new unoapp-winui 70ebc49
    • โž• Add support for WinUI 3 Alpha c6685d6
    • โž• Added rudimentary mouse input support for iPadOS f2f09ec
    • โšก๏ธ Update WinRT API set to 2004 (19041) 5559ece
    • SplitButton: Implemented SplitButton and ToggleButton 6c43f44
    • feat(splitview)!: Change SplitView.Content and SplitView.Pane to be UIElements 9e1aad7
    • ๐Ÿ›  fix(uielement)!: Remove IUIElement interface 062151c
    • feat(flyout)!: Change Flyout.Content to be UIElement 1e93e2c
    • ๐Ÿ›  fix(frameworkelement)!: Make IFrameworkElement internal 2b477a5
    • ๐Ÿ›  fix(usercontrol)!: [iOS] [MacOS] Remove new Content 0b965cb
    • ๐Ÿ›  fix(frameworkelement)!: Change FrameworkElement.FindName() to return object d1aaee4
    • ๐Ÿ›  fix!: Make various legacy-ish interfaces internal 27c0cd7
    • ๐Ÿ›  fix(frameworkelement)!: Make Layouter internal 6220654
    • feat(popup)!: Change Popup.Child type to be UIElement 9670650
    • ๐Ÿ›  fix(control)!: Make GetTemplateRoot() internal 697ca4f
    • ๐ŸŽ feat(border)!: [Android] [iOS] [MacOS] Change Border.Child to be UIElement 202043d
    • ๐Ÿ›  fix!: Remove BatchCollection type f34407c
    • ๐ŸŽ feat(panel)!: [Android] [iOS] [MacOS] UIElementCollection exposes a list of UIElements 893cf4b
    • feat(progressring)!: [Android] [iOS] Make WUX.ProgressRing inherit from Control 11c32b2
    • ๐ŸŽ feat(scrollcontentpresenter)!: [Android] [iOS] [MacOS] Make ScrollContentPresenter inherit from ContentPresenter 25c39c6
    • ๐ŸŽ feat(image)!: [MacOS] Make Image inherit from FrameworkElement 6e8cb8f
    • feat(image)!: [Android] [iOS] Make Image inherit from FrameworkElement 9a3790a
    • ๐Ÿ”จ refactor(StorageFolder)!: Rename CreateFileAsync(String, CreationCollisionOption) parameters a697a52
    • ๐Ÿ›  fix(resourcedictionary)!: Make ResourceDictionary.Lookup() internal, use correct lookup f8860cb
    • ๐Ÿ›  fix(app)!: [Android] Remove delegate-less activity constructor 5929533
    • ๐Ÿ›  fix(styles)!: Change default FontSize value b5521bf
    • ๐Ÿ›  fix(styles)!: Remove incorrect TextElement.Style property d96e585
    • ๐Ÿ›  fix(styles)!: Set DefaultStyleKey on all controls 302f0de
    • ๐Ÿ›  fix(styles)!: Distinguish default and implicit Styles 51e69e3
    • ๐Ÿ’… feat(styles)!: Implement tree-based resolution of StaticResources 0ef6df3
    • ๐Ÿ›  fix(styles)!: Fix ThemeDictionary resolution f2428e3

    ๐ŸŽ Performance Improvements

    • grid: The stackalloc clauses has been move out of loops to prevent leaks, per Standard ECMA-334 Standard december 2001, section 25.7. 7209448
    • [WASM] Avoid useless interop when creating shape 5111119
    • ๐Ÿšš [Wasm] Move GetThicknessAdjust to virtual method fedcafb
    • [WASM] Provide the culture to avoid useless/costly check to the Thread.Current.Culture 72feea0
    • [WASM] Subscribe to all pointer events at once 92d0fe6
    • โž• Add DependencyProperty local caching support 3304465
    • Adjust canvas children enumeration ff8b869
    • Avoid dictionary check in DP for the owner type a70f624
    • ๐Ÿ‘‰ Make DependencyObjectStore._thisWeakRef lazy 59f5894
    • ๐Ÿšš Move DependencyObjectStore to nullable 1221816
    • โœ‚ Remove use of Enumerable.Any() in Grid layout 7ab8c6f
    • ๐Ÿ‘‰ Use O(1) indexing for dependency properties collection 5f1fe41

    ๐Ÿ’ฅ BREAKING CHANGES

    • ๐Ÿ The dependency on System.Runtime.InteropServices.WindowsRuntime has been removed to avoid invalid uses of EventRegistrationToken on Windows.
    • ๐Ÿ‘ This PR makes many breaking changes in the WebAssembly target to enable the support for additional backends.
    • ๐Ÿ Aligns with Windows.
    • ๐Ÿ‘ This was a placeholder for properties that should have been typed as UIElement, but needed to support IFrameworkElement. It's no longer needed now that IFrameworkElement isn't public.
    • ๐Ÿ Now is a UIElement. Aligns with Windows.
    • โœ‚ Remove the IFrameworkElement interface from the public API. This interface no longer needs to be publicly exposed now that remaining framework types (Image, ScrollContentPresenter, ProgressRing) are FrameworkElements, and removing it ensures that relevant APIs are aligned with the WinUI contract.
    • โœ‚ Remove UIView/NSView-typed Content. Binary breaking change.
    • ๐Ÿ Now returns System.Object. Aligns with Windows.
    • โœ‚ Remove these interfaces from the public API, which are not part of WinUI and not particularly useful either.
    • โœ‚ Removed type. This is an implementation detail which normally shouldn't be accessed from external code.
    • ๐Ÿ Popup.Child no longer has native view type. Aligns with Windows.
    • โœ‚ Removed method. Not part of the WinUI contract and normally shouldn't be called by external code.
    • ๐Ÿ Border.Child no longer has native view type. Aligns with Windows.
    • โœ‚ Remove the BatchCollection abstract type which was used as the base type of UIElementCollection. This aligns with Windows and simplifies the UIElementCollection implementation.
    • ๐Ÿ UIElementCollection is now typed to UIElement rather than to the native view type, aligning with Windows and WASM.
    • ProgressRing on Android/iOS now inherits from Control. It's still using the native control to display the progress ring, which is now nested inside the WinUI one.
    • ๐ŸŽ ScrollContentPresenter on Android/iOS/MacOS is now a FrameworkElement, instead of inheriting directly from native scroll viewer. The native scroll viewer is now a child of the managed ScrollContentPresenter.

    On Android only, the NativeScrollContentPresenter continues to implement IFrameworkElement, since it uses the Layouter to arrange its children which is tightly coupled to IFrameworkElement.

    • ๐Ÿ Image now inherits correctly from FrameworkElement, instead of directly from the native type. The native image is now internally set as a child of the Windows.UI.Xaml.Controls.Image.
    • ๐Ÿ Image now inherits correctly from FrameworkElement, instead of directly from the native type. The native image is now internally set as a child of the Windows.UI.Xaml.Controls.Image.
    • This change is binary breaking, but will not impact source code depending on these members.
    • ๐Ÿšš The RaisePropertyChanged method is now removed, as it is not part of the UWP contract. If you relied on this behavior, you'll need to implement the INotifyPropertyChanged interface on your class explicitly.
    • โช An INPC now processes the value of the raised property, regardless of the reference having changed. The behavior can be restored using FeatureConfiguration.Binding.IgnoreINPCSameReferences = true;
    • Align StorageFolder.CreateFileAsync(String, CreationCollisionOption) with UWP
    • This method isn't part of the public .NET contract on WinUI. Use item indexing or TryGetValue() instead.
    • โœ‚ Removed this ctor entirely because it's incompatible with system theme (light mode/dark mode) handling.

    This is a one-line fix in app code (normally Main.cs):
    : base(new App(), should be replaced by : base(() => new App(),

    • โšก๏ธ Default FontSize for TextBlock, Control etc changed from 11.0 to 15.0, to match the default value for UWP with SDK 16299, which Uno is currently aligned against. (Note that this should change to 14.0 when Uno updates to target a newer version.)
    • โœ‚ Removed unused TextElement.Style property. This doesn't exist on UWP, and doesn't seem to be used any more by Uno.
    • ๐Ÿ’… DefaultStyleKey now must be set on custom control implementations that have their own style, as for Windows. (Before Uno implicitly behaved as if DefaultStyleKey was always set to the most derived type.)

    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().

    • ๐Ÿ’… Styles handling has changed significantly to conform closely with Windows behavior. Implicit and explicit Styles within app code are now additive with the default Style coming from the framework, unless DefaultStyleKey is modified.

    ๐Ÿ’… Partial implementation of correct style handling:

    • 0๏ธโƒฃ maintain separate user and default layers
    • ๐Ÿ’… clear previous style when new style is set

    • โœ… The tree-based resolution of XAML resources creates binary breaking change with libraries compiled against previous versions of Uno, which were generating public static properties for every resource. Libraries containing XAML resources will need to be recompiled with the latest Uno version.

    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.

    • ๐Ÿ To match Windows behavior, resources in Default ThemeDictionary are no longer considered if a more specific ThemeDictionary exists (eg Light), even if that dictionary doesn't contain the key.
    • โšก๏ธ This update now forces the materialization of UserControl instances in the visual tree.

    • ๐Ÿ‘‰ UserControl no longer incorrectly accepts VisualStateManager, and must be placed on the first child

    • โช To restore the skipping of UserControl instances, add the following in the csproj:

      <UnoSkipUserControlsInVisualTree>true</UnoSkipUserControlsInVisualTree>

    • Selector: The Selector.SelectionChanged event is now raised after the SelectedValue, SelectedItem and SelectedIndex properties are updated. The original behavior was incorrect.

    ๐Ÿ› Bug Fixes

    • Don't use Type.GetType in ApiInformation 56c6487
    • autosuggestbox: Fixed bugs in AutoSuggestBox when using TextMemberPath 1ebafdb
    • elevatedview: Size of ElevatedView was not following layout constrains 32371fe
    • imagebrush: [iOS] Update background when ImageBrush changes d3c87f0
    • ios: TimePicker ClockIdentifier getting overwritten 36c94e6
    • PasswordBox: fixed reveal button being visible when it shouldn't be. Added PasswordRevealMode property. baf207b
    • perf: Disable untracked sources 07dac32
    • scrollVIewer: Detach from events to avoid memory leak af5335c
    • shapes: [Skia] Adjust shapes path alignment given StrokeThickness 4959b08
    • skia: GridView panel is now a WrapPanel a6d37db
    • Close PathFigure 81acc98
    • Some controls might be recycled on creation 75eda7f
    • elevatedview: Fixed a problem on Wasm on cultures using a comma as decimal separator. 8d63f55
    • ๐Ÿ’… style: DatePickerFlyoutPresenter style not applied e296744
    • theme: [WASM] Ensure entire visual tree is updated when theme changes 83ce5ed
    • theme: Apply updated theme resources with correct precedence 6172b72
    • theme: Update ContentPresenter and TextBlock default foregrounds when theme changes 0f2bffe
    • timepicker: aligned style with uwp 43f5639
    • wasm: Fix invalid path for Lottie assets b17986a
    • ๐Ÿ‘‰ Make Application.Resources writeable 59691ca
    • Mark FrameworkElement.Tag as implemented 2f6e2e9
    • picker flyout cancel button partially blocked by notch in landscape 11569ed
    • RadialProgressbar Direction b44160a
    • ๐ŸŽ RadialProgressBar on macOS 8b9a823
    • Rectangle drawing for specified width and height d57e0f1
    • โช Revert SampleApp theme detection 4aec41f
    • โ†ช Workaround for PG-AOT issue fd0838b
    • ApplicationTheme: Avoid macOS detection crash 1af18c3
    • ApplicationTheme: macOS theme change observing bf676a6
    • elevatedview: ElevatedView were not measuring properly its elevated content on UWP. 2b5b389
    • elevatedview: ElevatedView were not properly updated when the background was changed. 64c100d
    • elevatedview: Patch to prevent the ElevatedView from being cut when used directly in a ContentControl. 70b6b83
    • ๐ŸŽ macOS: crash when finishing animation da2ae20
    • ๐ŸŽ macOS: textblock not showing text 8efc1ce
    • passwordBox: [MacOS] Fix the reveal button not working b1c2208
    • shapes: Fixes stretch none top/left alignment 6ece5dc
    • theme: Ensure Setters in visual states apply up-to-date ThemeResource values 86a546b
    • theme: Update shared resources in dictionaries when system theme changes 293dfe8
    • theme: Update ThemeResource bindings in non-FrameworkElements 67e71f6
    • wasm: Slightly improved ImageBrush image positionning on Wasm. Still not 100% accurate with UWP. 8c96d38
    • โœ… [Skia] Fix TextBlock hit testing e146e22
    • [Skia] Make visiblity change invalidate the layout 17ffa98
    • android: ImageBrush stackoverflow may terminate the app 8c3defb
    • Android: failsafe for layouter and virtualizing panel native overrides 88225e0
    • animations: Fix NRE when animating Transform that's not set as RenderTransform 89e02a3
    • elevatedview: Added support for Round Corners on UWP for ElevatedView. 298d589
    • flyout: Don't apply null FlyoutPresenterStyle c5a27f9
    • shapes: Adjust unbounded relative shapes measure 9097c1a
    • ๐Ÿ”„ Change default ShadowColor Property on ElevatedView for Android 2774ea2
    • Race condition in CoreDispatcher.RunAsync fd05f5d
    • Image: images now use the MonochromeColor property on Android af2b4a7
    • revealbrush: [Android] Fix exception when using RevealBrush 16f6a39
    • skia: dark theme support 5954646
    • skiawpf: Set as handled native wheel events. 9947711
    • splitview: Support non-buttons as light dismiss layer c8dfe9a
    • ๐Ÿ’… textBlockButtonStyle: Introduced uwp generic TextBlockButtonStyle, to unify platforms 86137b9
    • uielement: Apply all Transform types to UIElement.Clip 4598105
    • xaml: Allow double literals in Xaml with superfluous curly brackets 96f4b45
    • xaml: Allow duplicate resource names inside top-level ResourceDictionary fcc508d
    • xaml: Fix parsing errors when default namespace is not first declaration 982cc0d
    • xaml: Support converted ThemeResource assignations 8e6e16e
    • [Skia] Adjust text rendering opacity 7a9f3d7
    • 0๏ธโƒฃ Adjust default LogicalDpi for unsupported platforms 02187f5
    • 0๏ธโƒฃ Adjust for gitpod default root e663445
    • Apply layout rouding, fix invalid rectangle thickness computation 4505e97
    • Publish the winjs symbol font in samples app fe6bf25
    • ๐Ÿ— SamplesApp.Wasm won't build 759e3b6
    • elevatedview: Fixed problem with inclusion of Generic.xaml in the Toolkit project. 4a9ccba
    • elevatedview: Let custom shadow color only on API 28+ f5d408a
    • elevatedview: On Windows, the ElevatedView result is now more similar to other platforms. cc8cf32
    • elevatedview: Removed usage of IFrameworkElement 0508640
    • elevatedview: Set default background to transparent. 3e53827
    • ellipse: On Wasm, the arrange were not properly invalidated when the Stroke was changed. eb4f880
    • ellipse: On Wasm, the ellipse stroke were not properly calculated. b20434c
    • pointers: [WASM] Fix the OriginalSource of pointer events for Image 1a89220
    • shapes: [WASM] Restore fix to properly suppoirt null Points collection in Polygon and Polyline cc839cf
    • timePicker: [IOS] Timepicker is now visible in dark mode eff9eac
    • wasm: ContentControl clipping behavior were not compiled for Wasm. bf0b036
    • ๐Ÿ“ฆ [Wasm] Adjust LottieVisualSource with packager 1.3+ c3ce26b
    • Adjust Template to remove __WASM__ a8ecb66
    • DataContext is wrongly propagated to all DependencyObject when set into a DependencyProperty 4863929
    • Do not use the FwPropMeta when not needed (fix CI) 5a2fd53
    • ๐Ÿ›  Fix UIElementCollection.Enumerator doesn't enumerate 013903f
    • ๐Ÿ›  Fix UWP build 022d641
    • Foreground type check on TextBlock 77a0cbb
    • Include UNO_REFERENCE_API for skia targets 51df8bf
    • Include UpToDate checks for shared projects xaml files 03ebd34
    • ๐Ÿ“‡ Make all Uno's DP (a.k.a. Framework DP) use the FrameworkPropertyMetadata bb7f225
    • ๐Ÿ‘‰ Make sure that all ControlTemplate properties are not propagating the DataContext 5f6049d
    • ๐Ÿ‘‰ Make sure that all DataTemplate properties are not propagating the DataContext 902ac10
    • ๐Ÿ’… Make sure that all Style properties are not propagating the DataContext 1403806
    • โœ‚ Remove dependency on System.Runtime.InteropServices.WindowsRuntime 4753d37
    • โœ… ThicknessHelper crash in UWP runtime tests affb76b
    • android: Adjust image loading for invalid characters 2b9bebe
    • animation: Fixed DoubleAnimationUsingKeyFrames on Android. 2a037e2
    • animation: Storyboard.TurnOverAnimationsTo() were not stopping the current running animation. 11b51ba
    • applytemplate: Added a new deferred mode for .ApplyTemplate(). opt-in for all platforms except Wasm which is opt-out. d60d093
    • applytemplate: Call the OnApplyTemplate synchronously when .ApplyTemplate is used. c069cd8
    • applytemplate: Make the deferred OnApplyTemplate default on both Wasm & Tests (dotnet) d0373d0
    • applytemplate: UseDeferredApplyTemplate -> UseDeferredOnApplyTemplate a2f77ca
    • shapes: [WASM] Poly<gon|line> beeing updated when points are added ccecc83
    • shapes: Improve PointCollection to not clone points list if useless 39f97ae
    • xamlgenerator: prevent the generator from generating useless code for global resources. 338ea92
    • xamlgenerator: Previous fix were too intrusive. ca56caa
    • xamlgenerator: Work-around for a problem where some XAML files could be included many times in the same output. 84c26a3
    • [Wasm] DispatchStorageInitialized is not static and fails under AOT 21e858b
    • ๐Ÿ”€ [Wasm] Fix invalid multiple IDBFS initialization, synchronize StorageFolder async operations with IDBFS initialization 78224e2
    • Adjust gitpod serve script bd0c2c8
    • Align reference comparison for INPC events acd1f32
    • ๐Ÿ— CI build with 'method not found' error 45cfff4
    • ๐Ÿ‘‰ Make FrameworkElement.OnLoaded/OnUnloaded private d33a72a
    • ๐Ÿ‘‰ Make sure that all ItemsPanelTemplate properties are not propagating the DataContext 47909f2
    • ๐Ÿ”€ Merge issue 7a57920
    • ๐Ÿšš Move field defined properties to properties 9951318
    • 0๏ธโƒฃ NavigationView AlwaysShowHeader property default as true f6b13be
    • Prevent possible collection changed while enumerating in COmpositionTraget.Rendering eed0cfe
    • re-added icons folder 3a5e4d7
    • โœ‚ Remove INotifyPropertyChange from iOS, Android, macOS. e82cde5
    • ๐Ÿ— SharedAssets.md build action is not supported 93fa746
    • TakeScreenShot failure when the app fails to start ab85e9c
    • ToggleSwitch.Header is never visible 52b6cb2
    • ToggleSwitch.Header is never visible 93d5e33
    • ToggleSwitch.Header is never visible f2151c0
    • ToggleSwitch.Header is never visible d7f6c31
    • โšก๏ธ Update RemoteControl server to netcoreap 3.1 60b58fb
    • ๐Ÿ‘‰ Use RetryAttribute fr AutoRetryAttribute a44df01
    • AutoSuggestBox: handle keyboard input for chosing suggestions. invoke proper events as per uwp. 22c3c6a
    • ๐Ÿ“š Documentation: doube table of content 87a431e
    • path: Fixed path with geometries on Wasm were not serialized using CultureInvariant, leading to errors in cultures using a comma as decimal separator. 1ccf922
    • pointers: [WASM] Fix the original source of the pointer events on shapes 6cc77f4
    • progressbar: fix duplicated control (removed UWP ProgressBar for WinUI target) ca5735e
    • progressring: ProgressRing were still visible on iOS when setting Visibility=Collapsed 0d4ef83
    • ResourceDictionary: Key overwrite via indexer 64455ee
    • scrollBar: Disable Animation on WASM 7c4a8c6
    • shapes: [iOS] Cleanup and fix final clipping issue for new measure/arrange a9f2af2
    • shapes: Fix the Polygon on WASM (not initialized) 435e56f
    • StorageFolder: Adjust CreateFileAsync(String) behavior 6c35347
    • StorageFolder: Fix CreateFileAsync(String, CreationCollisionOption.ReplaceExisting) behavior 2a0a9cd
    • ๐Ÿ’… style: Fix property set not applied within callback from style application 9c08827
    • UnoSolutionTemplate: Fully qualify Uno.UI.ActivityHelper.AllConfigChanges a4b8929
    • webview: Fixed video display in WebView on Android: the control was forced to use software rendering. d14114f
    • ๐Ÿ“œ Corner radius parsing with spaces 765cf30
    • colorbrush: removed invalid explicit type cast. f4dab42
    • converter: implicit operator was a bad idea. 0da997d
    • progressbar: DefaultStyleKey is wrong, following new resource approach. a3cf771
    • progressbar: Fixed ProgressBar for Wasm. 99ee738
    • progressbar: Initial width of the indicator was 0 on iOS. 641bbc9
    • resources: Add missing CalendarDatePicker and CalendarView system resources cd1a775
    • resources: Add missing ComboBox resource e46faa6
    • resources: Add missing ComboBox system resources 6983ca4
    • resources: Add ScrollViewerScrollBarlessTemplate template cde2aa3
    • resources: Use correct dark and high-contrast values for SystemChromeMediumHighColor 7442dd1
    • shapes: [iOS] Fix Horizontal and Vertical line not showing, and Polyline clipping issues 398fb82
    • shapes: [iOS] Fix support of vertica/horisontal lines ddc28f2
    • shapes: [iOS] make all shapes use the new measure/arrange logic c782a7d
    • shapes: [iOS] Refactor the way shapes are rendered on iOSmacOS a795a24
    • shapes: [iOS] Restore the layer support 9542e3f
    • shapes: Complete the absolute shapes rendering refactor 5725d86
    • shapes: Fix possible alignemnt issue whith scaled down Path 125da9b
    • shapes: Fix some stretching issues ebafb22
    • shapes: Fix the CommandBar invalid measure b3361cc
    • shapes: Fix the Path stretching issues b7807b6
    • ๐ŸŽ (macOS) shapes build 5c3bf7e
    • shapes: Polygon and Polyline's Points property was not intialized 653946a
    • ๐Ÿšš [iOS] Fix DependencyObjectStore dispose race condition, remove unused members. 39987a0, closes #3359
    • โž• Add missing SystemReveal resources 751dd37
    • Missing AndroidX dependency fd2f687
    • FontWeight: changed UI.Text.FontWeight to better reflect UWP definition 1d7de9c
    • foundation: Fix ObservableVector.Remove() raising event twice 0f3708b
    • imageBrush: Fix multi targeting issue 28436d6
    • ๐ŸŽ macOS: Uno.UI.Toolkit file is missing in nuspec df5bdd7
    • MessageDialog: fixed ShowAsync not handling strings with escaped characters properly on wasm e75c346
    • msal: add support for macOS e8cca79
    • msal: Remove annoying package references for Uno.UI.MSAL/Uno.WinUI.MSAL 3dcd2b6
    • msal: Uno.UI.MSAL dependencies were wrong. 72085d1
    • NavigationView: unable to select first menuitem after selecting Settings item-android 03aba47
    • โšก๏ธ [Wasm] Adjust for newer bootstrapper update to include app base path 9f9e044
    • Adjust for double splashscreen images 9ba1537
    • Restore the support of the UNO_BOOTSTRAP_APP_BASE 7d5d17a
    • Android: Support for number leading and invalid characters in android resource names 9c0517a
    • ApplicationDataContainer: Update WebAssembly storage to use javascript localStorage ab8d2a0, closes #2923
    • codegen: double assignments from implicit content+localization 091df49
    • ComboBox: Correctly update CommonStates on apply template to fix disabled ComboBox visual state not appearing (for all platforms) 4515f0f
    • dotnet_new: Fix wasm head is not added to the existing solution 5ffae54
    • ElevatedView: Fix ElevatedView not showing in UWP 9435b34
    • hotreload: Adjust FileSystemWatcher for updated xaml files d2e144a, closes #2829
    • layout: [iOS] Don't layout collapsed views 667cceb
    • lottie: On Wasm, using the PlaybackRate on a system using a comma insteaf of a dot (mostly european languages) could lead to non-working Lottie animation. 78e2b8a
    • lottie: On Wasm, when a Lottie animation were started (.Play()) before being loaded, a concurrency issue was preventing the animation from starting once loaded. 01a4bdd
    • ๐ŸŽ macOS: Grid inner control display text fb0b834
    • pointers: [WASM] Fix negative pointer id on safari for iOS prevents pointers events 3dd167c
    • remotecontrol: Failsafe for Uno.UI.RemoteControl when referenced in UWP projects e6f1f9f
    • resources: Restore retrieval of system resources from ResourceDictionary adc1c93
    • Selector: Fix SelectionChanged / SelectedItem ordering to align with UWP 6598a41
    • SplitButton: Use new keyword on Android only 7f7c7e7
    • SplitView: Apply clipping to right pane e6ae8f7
    • ๐Ÿ’… styles: [iOS] Apply styles root-first on adding view to live tree fc9bda9
    • ๐Ÿ’… styles: [WASM] Ensure OnLoading is called for children added in Loaded b2e152a
    • ๐Ÿ’… styles: [WASM] Make GridLength TypeConverter available 8c9ec7e
    • ๐Ÿ’… styles: [WASM] Set Application.Current synchronously 21201cc
    • ๐Ÿ’… styles: Add MergedDictionaries first 5fa5437
    • ๐Ÿ’… styles: Add missing DatePicker and TimePicker resources 3c7f496
    • ๐Ÿ’… styles: Add UWP DatePicker Style d8aac58, closes #188
    • ๐Ÿ’… styles: Apply LightDismissOverlayBackground correctly as theme resource 7ca1638
    • ๐Ÿ’… styles: Delay Style application until Xaml parsing completes 5658ae5
    • ๐Ÿ’… styles: Do case-insensitive comparison for ResourceDictionary.Source 5a00872
    • ๐Ÿ’… styles: Fix AppBar system resource resolution 7ca7c45
    • ๐Ÿ’… styles: Fix default style precedence over inheritance d107c70
    • ๐Ÿ’… styles: Fix duplicate assignation of inline Style 3f11f82
    • ๐Ÿ’… styles: Fix typo in CheckBox style a7cd797
    • ๐Ÿ’… styles: Initialize theme dictionaries before main body 0b37a52
    • ๐Ÿ’… styles: Lazilly initialize Styles in ResourceDictionary b664dd3
    • ๐Ÿ’… styles: Make ThemeDictionaries a ResourceDictionary 6bccf63
    • ๐Ÿ’… styles: Re-enable native Styles support 6b60e26
    • ๐Ÿ’… styles: Remove duplicate entries in SystemResources.xaml 4a17719
    • ๐Ÿ’… styles: Support conditional namespaces when no Ignore defined 8cab67b
    • ๐Ÿ’… styles: Support lexically-forward references in local Resources declarations 91dce9c
    • systemresource: SystemErrorTextColor was not of right color on Light theme (yellow instead of red). 9d167f5
    • textblock: Apply default FontSize 9426327
    • Theme: Observing theme on WASM now works 5b0385d
    • ๐Ÿ‘‰ UserControl: Attached properties are now set on UserControl itself, not the first child 8c1c42c, closes #3243
    • Adjust UWP sample head d330404
    • Avoid samples app crashing when favorites can't be deserialized 9b2deee
    • ๐Ÿ›  Fix invalid using due to merge conflict 1c17650
    • โœ‚ Remove arbitrary 5 seconds delay workaround for iOS 704f52e
    • vsix: Adjust Library targets frameworks order to improve intellisense experience on Windows 0bb5577
    • winui3: Removed Microsoft.System namespace for non-WinUI3 output. a174979
    • XamlFileGenerator: Fully qualify more symbols 12500a8
    • scrollViewer: [Skia] Fix default style of ScrollBar 2006f3e
    • scrollViewer: [WASM] Remove deprecated css classes 6560377
    • scrollViewer: Coerce the scroll mode with the visibility and hide native SB when managed used. f19e564
    • scrollViewer: Update default style of ScrollViewer and enable managed scroll bars for WASM and Skia 57542c9