For a comprehensive description of the Uno 4.0 release, please read our blog post.
As we’re continuing the alignment with the WindowsAppSDK, we’ve made some binary and source breaking changes in the Uno.UI 4.0 NuGet packages.
Most of these changes are minor and are generally present to remove the use of uno-specific conditional code. You can find additional information on how to migrate to Uno 4.0 on our documentation site.
See the full change log below:
Features
- Add a FrameNavigationHelper to allow apps to access helper properties on Frame and its PackStackEntries 3826bf1
- Add automatic restore after dotnet new 848ebcc
- Add DispatcherQueue on CoreWIndow and CoreApplicationView e176c77
- Add DispatcherQueueHandler and DispatcherQueuePriority 1425e7b
- Add mixed C#/XAML hot reload support 6d3ec36
- Add support for
x:Name
hot reload 083fce5 - Add support for CustomVisualStateManager 1e7103f
- Add support for full uri in RC endpoint c5849cc
- Add support for local RC on remote environments 898acca
- Add support for multiple XamlReader types conversions 8c4845d
- Add XamlReader support for theme dictionaries d887a43
- Adjust the Popup hierarchy 13ec2fb
- Adjust vscode tasks/launch configurations 9f8eb9c
- Generate C# reload cookie for omnisharp compatibility bcaa4fb
- Android: Provide access to BaseActivity events from SpanningRectsExtension 23cca70
- listview: [iOS] [Android] Support ItemsPresenter.MinHeight 6dfc251
- rc: Add support for metadata update 8387262
- xamlreader: Add reload support for event bindings 2c1f7b2
- Add support for WinAppSDK 1.0-experimental1 31f45ea
- Align enums (netstandard2.0) f8abe44
- Align Panel DPs 1930257
- Align properties (netstandard2.0) fdcf4c5
- Align RelativePanel methods 12fb3ff
- Align Uno.Foundation (netstandard2.0) 9a08e12
- Align Windows.System.VirtualKey 5397faa
- Implement FileSavePicker for Gtk c946681
- Implement TextBox Description Property e14dd76
- Implement WinUI CommandBar and AppBar ce12824
- Improve generation cancellation for net5 and net6 4b612b6
- initial setup for foldable support c0c0833
- NavigationView InfoBadge integration 2e495ad
- Point users to implemented versions of obsolete WUX controls 9cdaacb
- Respond to top-level resource updates 8df6db9
- Update to WinAppSDK 1.0 9fd0a0c
- Update TwoPaneView to latest WinUI b221201
- android: Adjust Foldable screen nuget package naming db1d7ae
- Border: Add ability to use GradientBrushes for BorderBrush af760ff
- dragdrop: Add support of preview of dragged element on iOS and Android b749632
- GTK: Detect ApplicationPreferDarkTheme property change e6a173f
- IncrementNumberRounder: Implement RoundDouble Method 0fdab8e
- NumeralSystemTranslator: Implement TranslateNumerals method for Arab and ArabExt NumeralSystem value ee3e611
- perf: Improve perf of the ObjectAnimationUsingKeyFrame 3818924
- pointers: [GTK] Implement native pointer capture 624631a
- SignificantDigitsNumberRounder: implement RoundDouble method e30b006
- vsix: Restore Xamarin template for VS2022 e0a7bde
- WPF: Observe system theme during runtime f1ea619
- xamlreader: Support StaticResource assignation to non-DP fd535d2
- xamlreader: Update Setter.Value when theme changes 7ba8c58
- GetRadiosAsync() for Android 110d466
- Improve generated enums eccc12e
- Initial API surface validator b296076
- Port RadioMenuFlyoutItem 9b388c1
- Support Dark theme in Samples app 2f93a19
Bug Fixes
- animation: Fixed a problematic case where a native animation can be 'lost' if the GC is run during the duration of the animation, preventing the animation from being removed and leaving the UI in an undetermined undesired state. 81547ef
- template: Adjust dotnet new unoapp 57657f2
- vscode: Remove duplicate sln block a0021b8
- Add error message when linker is enabled during EnC session 7c261dd
- Add keepalive messages for RC client abc5093
- Add missing Immutable assembly for hot-reload generators 2f64555
- Add missing NavigationViewItemPresenter.InfoBadge property dabfe9a
- Add missing short flags for dotnet new 2294217
- Add server-side keepalive 8965b2f
- Add support for globbing in the shared project for vscode compatibility 87b32c3
- Adjust dotnet detection for C# hot reload 74e7803
- Adjust hot reload support for VS 2022 a6727d8
- Adjust InfoBarPanel namespace to match WinUI 9784afa
- adjust remote control target to net6 1a95097
- Adjust removal of uno websockets dependency 9d3feb2
- Avoid jumpy ScrollViewer visibility on Skia 0573b47
- Avoid TextChanged loop in GTK 997fd15
- Cache IsApiContractAvailable properly 6feacd3
- Capture all xaml handlers f26804a
- Disable assembly loading feature in XamlSchemaContext c2ddc8f
- Disable rolsyn generators for below MSBuild 17, fallback to uno source generators 1f5868d
- Dispose appinsights configuration 67deda2
- Don't call CloseAllPopups on Frame navigation 3438fee
- Don't create a window while checking dotnet version ca1d8ae
- Don't fail on missing metadata updater (net5 support) ab1c748
- Don't initialize telemetry on design time builds c7ffe08
- Don't regenerate source for ResourceDictionary runs adbd48d
- Fix support of the CustomVisualStateMamager 4cb5983
- IndexOutOfRange in DisplayRegionHelper.GetRegionInfo a4d301d
- metadata update after XAML hot reload breaks compilation 1c1d352
- Observe C# file changes 5abdebd
- Port IsPaneVisible fix from WinUI (microsoft/microsoft-ui-xaml#6227) d52b71e
- Propagate cancellations for more locations 1548c75
- Remove deprecated GenerateBuild for VS2022 compatibility b8cf02a
- FoldableApplicationViewSpanningRects: change Bounds pix to dip 13a8c44
- FoldableApplicationViewSpanningRects: remove dependency on MainActivity 4ded713
- VS2022 23c4467
- dragdrop: Fix support of transparent control in DragUI ef0b6fd
- ItemsControl: [Android] Adjust collection update reset for ComboBox 8581995
- ItemsControl: Fix for applying ItemContainerStyle dc7a7a9
- listview: [Android] Correct scroll offsets if necessary when scrolling upwards in list 5e8bce5
- listview: [Android] Fix crash on animated collection change 96cb63c
- listview: [Android] Fix crash when animating item 7d05e4c
- pointers: Improve relialibilty of hold gesture by always starting a timer on press when hold has been enabled. 4d18f58
- reg: ensure both net6/xamarin templates don't share ids 8ac1147
- TextBox should not get focused while manipulating ScrollViewer 87c9626
- listview: [Android] Fix flicker and clipping when ListViewItem.Margin is set 801f51c
- reg: [Android] Fix application content squeezed top left 595d4ea
- winui: Adjust DispatcherQueue implementation 263f914
- Add workaround for editorconfig race condition 787c644
- Bump x:Load timeout for large tests 45bd906
- Make sure that an element can invalidate itself (and its parents) while in being measured / arranged 6f30b05
- Border: Allow null BorderBrush to be set decb376
- calendar: Fix CalendarDatePicker cannot be scrolled when re-opened d161c91
- docs: Fix a few typos in VS2022 article f3e0a12
- docs: headers' anchor visibility is now hover 6dcf009
- listview: [iOS] Fix container reuse by template 868446f
- listview: [WASM] [Skia] Correct scroll offsets if necessary when scrolling upwards in list cd74fd9
- perf: Do not box Point for equality check a4d673d
- reg: Fix CornerRadius support on Border 9f0b463
- reg: Move DispatcherQueue to WinUI location 443a76f
- reg: Popup light overlay's was not rendered properly c2fcd60
- reg: Restore sizechanged propagation 30b0a0e
- Remove duplicate guids in solution file 4935613
- Skip generation run info for design-time builds 63d5ab5
- Use proper reference path validation for resource generation 18a4d6d
- VS Remotre control .NET version lookup 80ad551
- calendar: Fix initial scrolling state of the CalendarView d68c05f
- DependencyObjectGenerator: Place BindableAttribute on the correct type 852265c
- docs: Incorrect NuGet package name in logging.md c549ddc
- dotnetnew: Remove invalid solution filters in
dotnet new unoapp
11d4b56 - DualScreen: add RecyclerView to try and address linker issue 1b04f21
- DualScreen: attempt to address possible linker issues f3d3052
- DualScreen: remove unnecessary CreateInstance call in SamplesApp.Droid 225d0f2
- Duo: Observe all configuration changes for samples app 9d35b7b
- effectiveviewport: [Android] The SCP is now the element flagged as ScrollHost, like on UWP 43f56d0
- effectiveviewport: [iOS] The SCP is now flagged as ScrollHost f4b1937
- effectiveviewport: Fix effective viewport computation 3448722
- effectiveViewport: Make sure to raise the event when initializing multiple elements with EVP handlers 2ee3b50
- Foldable: fix bad merge 33586e0
- Foldable: update to use Foundation.Logging 96a5762
- FoldableApplicationViewSpanningRects: remove testing hack dcbcb14
- FoldableApplicationViewSpanningRects: revert change Bounds pix to dip 3b2b2a1
- HitTest: Check for Clip property for ClippingBounds 97152dd
- listview: Fix D&D UI not reporting move while reordering items 30fd8d3
- menuflyout: Ensure MenuFlyout nested submenus stay on screen cd13998
- pointers: [iOS-simulator] Improve debug by starting a timer for Holding on iOS when in simulator 3c6ce3d
- pointers: [Skia] Make sure to also release impiclit captures on pointer realease f3d53bc
- pointers: Make sure to abort drag manipulation as soon as possible if not touch pointer 1045c76
- pointers: Release implicit captures on manip completed d307101
- reg: Fix EVP not progated on native elements 42ac6dc
- reg: Fix EVP sometimes not propagated properly 932b82f
- reg: Fix support of Android versions below 30 (including UI test failing on CI) 07c3d23
- [Android] LayoutSlot was including magrins and alignments 9743762
- [Android] Window's visible bounds are incorrect 39ea361
- reg: Fix Viewport not updated on first load 7f2409b
- scrollbar: Fix possible layout cycle when scrollbar is lower than the min size of the thumb ceba136
- scrollviewer: [WASM] Make the SCP the "element which scrolls" (instead of the SV) ee21a4e
- viewport: Fix effective viewport adding scroll offsets twice d05ebc4
- Alignment regressions 9ee447d
- Fix lazy theme dictionary caching 8a43603
- Fix TextBox selection in Skia 851b3d9
- Update text according to AcceptsReturn d318146
- ItemsControl: avoid rebinding containers on collection change 4ed5bc4
- listview: [WASM] Support removing item while dragging 0c301cf
- pointers: Ensure that a manipulation cancelled by ManipStarting event is cleanup e1f5543
- reg: Adjust processors missing roslyn files a083153
- reg: Fix support of scroll offsets in ViusalTreeHelper c72890c
- reg: Fix WinUI build f9b33f6
- reg: Invalid location for android30 logging nuspec 60718cb
- reg: Restore string conversion a391022
- remotecontrol: Adjust https conversion 6477280
- resourcedictionary: Improve performance of ResourceDictionary with not-implemented types 94aad18
- scrollviewer: [WASM] Fix ScrollViewer incorrect offset after ChangeView() 7fddb8f
- styles: Fix error in styles loading with null Resources 685b396
- transformtovisual: [iOS] Fix TransformToVisual inside ListView b3c0a7b
- transformtovisual: Fix TransformToVisual on scrolled ScrollViewer df3f88d
- wasm: Image/AcrylicBrush.AssignAndObserveBrush exception 73df35b
- xamlreader: Fix exception when loading with empty Resources 3f58203
- xBind: [Wasm] Fix invalid internal ElementStub state ef37b28
- xBind: Fix xBind to other control without code-behind base class 76b2dba
- Add and apply NumberBox CommonStates 500c262
- Adjust enums 52fdbfc
- Adjust InputScope on iOS and implement for Wasm 7a28cd2
- Adjust PackageDiffIgnore 4772f08
- Alignment regressions 3a6b90f
- Apply visual states on date change cc08128
- Assign ImageBrush on Android properly 118e4db
- Changing Pivot.SelectedItem should reflect on Pivot.SelectedIndex 166e7a7
- Convert resources to target property type in generated code 873251d
- Correctly change PivotHeaderItem content when PivotItem.Header changes 5a85199
- Correctly handle whitespaces in XBind path rewriter dfeb4a5
- Disable Prism template test 7e0c367
- Disable XF template test 8fb48bf
- Don't close ContentDialogs on showing MessageDialog cd4b9e4
- Don't flag members as not implemented in bindable metadata 1f4351d
- Don't PreventDefault keydown event of TextBox 205e8fc
- Don't underline HyperlinkButton if not ImplicitTextBlock c1ef8c1
- Don't use cached value when it's no longer valid 8b94591
- Don't use nullable reference types in generated code b167107
- Error properly on invalid and duplicate x:Name 82c1d52
- Fix CurrentStateChanged raised in incorrect time e6f39f5
- Fix image flickering 9b6a8fc
- Fix NREs in PersonPicture 876bdf1
- Fix TextBox.Foreground on Skia c8f4b47
- Fixed SignificantDigitsNumberRounder.RoundDouble bug 223d8d2
- Generate analyzer suppressions properly edc8542
- Generate WebView.XYFocus properties 414816c
- GridViewItems are not visible 8583c31
- Handle converters and TargetNullValue in source generator 422e026
- Handle types correctly in ResourceDictionary 11b8a40
- Hide open flyouts when MessageDialog is shown 0b00af4
- HyperlinkButton underline 3c12d17
- Initial focus on Page a444b7a
- Invalid sourcegen update 6b3815b
- Invalidate cached theme dictionary when theme dictionaries are added/removed 57068a3
- ios commandbar navigationcommand icon alignment 7497510
- IsInContact is reported incorrectly for pointer events 8b10ac2
- IsInRange reported incorrectly in GTK 0e13068
- Make IsIntermediate setter internal fc06bd4
- Make sure that if TSInteropMarshaller.Allocate fails, we get the right exception ba663c0
- Move Background in default app template to Page 3c03e70
- Open suggestion list when focus, reflect text changes 8dc6472
- Overwrite runtime tests results file if exists 9b399c3
- Parse boolean correctly to not cause crash 0adb4fa
- Promote RS0030 (banned API) diagnostic to error 2803f4c
- Reduce number of exception raised by RemoteControloClient cf45c19
- Reduced the severity of the inconsistency message while adding/removing elements in Visual Tree on WASM. b8dfc4b
- Report not implemented diagnostics for generated code 4377f08
- Respect Opacity when rendering gradient brushes b92cdd8
- xbind: x:bind may not be evaluated if x:Load is true during Loading cc665d2
- xLoad: Adjust x:Load and x:Bind loading sequence a5217bf
- restore net6.0 for WebAssembly, disable linker in debug 1d447ca
- Reveal-based brushes crash on Skia 7aeb392
- Revert "fix: Add and apply NumberBox CommonStates" 82116b4
- Skip WebView.XYFocus properties 3130bbe
- Text selection on WASM 56f9afa
- Tweak the Popup hierarchy 7a8403c
- Tweak the Popup hierarchy II 0ac1241
- 2022: Fix remote control build under VS2022 1a1b091
- Android: Fix NRE when TextBlock.FontFamily is null 5a428c9
- dragdrop: [wasm] Even if multi-window is not supported yet, instanciating a new Window without using it would crash the app due to D&D 53dc06d
- FindName: Handle resources and non-FrameworkElement objects a4492c3
- listview: [Android] Fix drag-to-reorder not applying 4a49f7d
- listview: [Android] Fix errors when dragging rapidly 1d94cf8
- reg: Fix OAUKF tests 9098250
- vsix: Add missing embedded resources a7e29c1
- wasm: geometry not receiving pointer events 89ffb4f
- xLoad: [Android] Fix invalid x:Load reentrancy issue 9784464
- xLoad: Fix x:Load nesting and ElementStub strong reference 9371f72
- Retry on detached DOM element 3b9ab82
- Show error from DependencyObjectGenerator if type is android/ios/macos view symbol 4ea8c1f
- Tweak the Popup hierarchy III eea84a6
- Update PathMarkupParser to latest from Avalonia 9a6ba19
Reverts
-
Revert "fix: Disable rolsyn generators for below MSBuild 17, fallback to uno source generators" 2eac0a3
-
feat!: Align with WinUI 3 desktop apis bdb7295
-
fix!: Make some classes static to match UWP 53f6d4e
-
fix!: Generate property setters only when needed d9bdd5d
-
fix(combobox)!: Make ComboBox inherit from Selector 63f35c3
-
fix!: Make CoreDispatcher.Main internal to match UWP 5363a1f
-
fix!: Match FlyoutBase.Opened,Closed,Opening with UWP 1ab5f89
-
fix!: Fix resource dictionary path handling 30f21ac
-
fix!: Fix InputScope on Android to match UWP behavior e5fea16
Performance Improvements
- hotreload: Reduce the memory allocation d582d9e
- reg: Fix performance regression in fast convert da59fc5
- wasm: Place loaded/unloaded exception handling behind a flag 9cd9f35
- Do cheap check first 620bc35
BREAKING CHANGES
- This change is a binary breaking change only.
- android: Move
Uno.UI.DualScreen
toUno.UI.Foldable
-
- Removal of Uno.Extensions.ObservableCollectionUpdateResultsExtensions
- Removal of UIAsyncOperation.CompletionSource
- Changed type of ApiInformation.NotImplementedLogLevel to Uno.Foundation.Logging.LogLevel
Windows.UI.Text.FontWeights
andWindows.UI.Colors
are removed fromUno.WinUI
. UseMicrosoft.UI.Text.FontWeights
andMicrosoft.UI.Colors
instead.
This change also moves to use the up-lifted Input APIs provided by the Microsoft.UI.Input namespace.
- Some classes are now static to match UWP.
- Some properties now no longer have setters to match UWP.
- ComboBox now inherits from Selector rather than ListViewBase, to match the UWP/WinUI inheritance hierarchy.
CoreDispatcher.Main
is no longer public.- Align
FlyoutBase.Opened
,FlyoutBase.Closed
, andFlyoutBase.Opening
signature with UWP. - Source paths starting with '/' are now considered relative to project root instead of current file.
- Introduces a breaking change for InputScope that is controlled by FeatureConfiguration.TextBox.UseLegacyInputScope