5.3.31
Hello Rider lovers!! We are bringing many additions to Uno Platform in this 5.3 release, but the highlight is official support for JetBrains Rider, as well as improved Hot Reload experience, two new UI controls (ItemsView, SelectorBar), exciting new options for Fonts, and adding support for SkiaSharp 3 preview, to name a few.
We’ve also spent significant effort into further simplifying Uno Platform versioning, so that you can spend more time coding and less time fiddling with NuGet packages. Lastly, we are continuing support for .NET 9 Preview releases and retiring support for .NET 7 as it is now officially not supported by Microsoft any longer.
Visit our blog post for more details!
Here's an extended list of features included in this release:
- Rider Plugin support
- Open Sans is now the default font for uno targets
- In-app Visual Feedback for HotReload
- SkiaSharp 3 Previews support
- All of Uno Platform is now versioned behind the Uno.Sdk
- Uno itself is now build with .NET 9
- Improved project reload in Visual Studio 2022 on target framework change to avoid closing opened editors
- ExtendIntoTitleBar on WPF
- PreviewKey<Down|Up> on Skia Desktop
- ScrollIntoView with using non-virtualizing ListViews
- Layout cycles detection
ToolTips
are now enabled by default on Skia- Support for Implement
FlyoutBase.OverlayInputPassThroughElement
- Skia Desktop on Linux support for drag and drop from other windows
ItemsView
support- Modifiers on keyboard events on WASM
- MRT Core
ResourceLoader
support - Skia Desktop support for
Shape.StrokeDashArray
andCompositionStrokeDashArray
- Support for Linux framebuffer terminal redirection
- New analyzer to detect if
InitializeComponent
is missing in a code-behind file - Add Multi-Touch support on Skia Desktop on Windows
- Performance
- resw resources trimming
- Android startup performance improvements
- RenderTargetBitmap / Drag and Drop crash fix on Android
- Many rendering and interaction improvements to the Skia Desktop
TextBox
And as always, many thanks to our contributors:
- Documents updates by @Cjhemmer, @ArchieCoder, @lindexi, @emmanuel-ferdman, @abduelhamit and @mcNets
- A Skia Desktop performance update by @KevinFerati
- CI improvements by @ceddy4395
- Pointer tests by @lindexi
- Skia Desktop pointers (multitouch, mouse) improvements for Windows and Linux by @lindexi
Features
- Add basic support for ContentSite and ContentSiteView (05dffe7)
- Add Microsoft.Windows.ApplicationModel.Resources interfaces and enums (82de40b)
- add support for ExtendIntoTitleBar on WPF (e7fe6f9)
- add support for PreviewKey<Down|Up> on skia (5c34158)
- add support for ScrollIntoView with using non-virtualizing ListViews (2fde55c)
- Add support for the Flyou.OverlayInputPassThroughElement on all platforms (7357b94)
- Add Uno.ResourceTrimmingValidator (e9f7c2b)
- adding alias for ExtensionsCore (7a336be)
- Adjust WASM to use XamlRoot.RasterizationScale (841a0e3)
- Avoid faux linear gradients on borders on iOS and macOS (9c139f7)
- Basic ContentIsland RasterizationScale support (e0e51ee)
- Basic implementation for detecting layout cycles (461d1f3)
- ContentIslandStateChangedEventArgs (9f19c40)
- Enable ToolTips on Skia by default (fdaebd3)
- FauxGradientBorderPresenter (ea291b8)
- flyout: Add sample for FlyoutBase.OverlayInputPassThroughElement (7a88c76)
- flyout: Implement FlyoutBase.OverlayInputPassThroughElement (c54cc2f)
- Implement AreAutomationPeerChildrenReversed on UIElement (993b68b)
- Implement new focus-related types (ed17993)
- Implement ScrollItemAdapter (fbcbeaa)
- Implement ScrollItemAdapter AccessKeyStringBuilder (636260e)
- implement the X Drag and Drop (XDnD) extension to accept dragging from other windows (f5295cc)
- introduce a new BorderVisual to handle rendering the border and the background. (d7dbf39)
- ItemsView (49bff4d)
- make UnoFeatures ignore casing (e873d73)
- only "repaint" Visuals that actually changed (ec00c67)
- pointers: Add support of pointer rerouting on Android (a409065)
- pointers: Support pass through on iOS (11ad2a5)
- Port
ComboBoxAutomationPeer
(325ee6d) - Port FocusController (afea99b)
- Port FocusManager adapters from WinUI (05b5b4a)
- Port RootScale and related classes (30ab0b4)
- sdk: Add support for Apple Privacy Manifest (57fb9e3)
- Set modifiers on keyboard events on WASM (d42429b)
- set the Version (20e16f4)
- Simplified implementation of MRT Core
ResourceLoader
(ec0dc35) - skia: Support Shape.StrokeDashArray and CompositionStrokeDashArray (c3c499f)
- Support composition keyframe animations (5277f0d)
- Support for SelectorBar and SelectorBarItem (9068f91)
- Support for SkiaSharp 3 (18e3798)
- Support for UIElementCollection.Move on Skia (cd661d4)
- Support ThemeResource in TargetNullValue and FallbackValue (7514964)
- textbox: add support for up/down arrow keys preserving the caret "position" (550be6b)
- textbox: variable Tab widths i.e. Tab stops (8b7e727)
- UnoInitializeComponentAnalyzer (583210a)
- Update Common theme resources (8fe36a1)
- Update RatingControl to winui3/release/1.4.2 (79fabac)
- Update ToolTip styles (c99767e)
- Upri resources trimming (6c0935a)
- Use XamlRoot.RasterizationScale in GTK renderers (267be8c)
- wpf: Add Multi-Touch support on WPF platform (84396fd)
Performance Improvements
- Avoid boxing in ContainerVisual.SetMatrixDirty (1db6873)
- Avoid boxing StringRuneEnumerator (35e77b4)
- Avoid type checks against UnsetValue (d114171)
- Avoid unnecessary lookup in
_loadedEventList
(f1cd8c2) - Enable UPRI trimming everywhere ILLink runs (7fda9b8)
- Fix performance regression in FindName (0fcfee9)
- Improve GeneratedDependencyProperty generated code (80614a8)
- Improve startup performance by trimming unused UITest exports (dc95d6a)
- Misc perf improvement to ResourceDictionary (c3a2a3d)
- TextBlock: Removed LINQ when invalidating inlines (61f1081)
- Update X11 bindings to LibraryImport (2037a90)
- use skia Visuals for hit testing instead of walking up the tree and applying transformations (bbf97bc)
- wpf: Replace Reflection with PInovke win32 in WpfKeyboardInputSource (a851109)
BREAKING CHANGES
-
fix!: Bypass keyboard closing behavior on iOS (da4a375)
-
On iOS the Uno.UI.Window.BypassCheckToCloseKeyboard is now true to avoid changing focus on touch. If you want to bring back the original behavior use:
#if IOS
Uno.UI.Window.BypassCheckToCloseKeyboard = false;
#endif
Bug Fixes
- [iOS] fix pass-through element (8e5aca1)
- Add ApplicationId to allow for Automatic Provisioning (ba466f7)
- add error code prefix to cSpell.json (62083f3)
- Add IObservableVector support for ItemsSourceView (7ddde27)
- add Lottie packages with Material/Cupertino theme (f1f757c)
- Add missing base.OnVisibilityChanged call in AppBar and AppBarSeparator (70644de)
- add missing Svg.Skia package for Svg feature (2c3aa1c)
- add missing Uno.Toolkit.Skia.WinUI reference (c9b2262)
- adding empty lib resources for Windows10 targets (a6e0f82)
- Adjust AppBarToggleButton styles to use FauxGradientBorderPresenter (b6b5a1a)
- Adjust AutoSuggestBox styles to use FauxGradientBorderPresenter (ce1d6e7)
- Adjust Button styles to use FauxGradientBorderPresenter (114f3d9)
- Adjust CalendarDatePicker styles to use FauxGradientBorderPresenter (0c8a13c)
- Adjust ComboBox styles to use FauxGradientBorderPresenter (7f0e87e)
- Adjust condition for tf-specific VS debug build (e75a7e0)
- Adjust DatePicker styles to use FauxGradientBorderPresenter (1da15fd)
- Adjust desktop hot load under linux (4e9ab3e)
- Adjust environment name (c8e22c5)
- Adjust global properties publication (3613436)
- Adjust incremental build for devserver (28e3e13)
- Adjust invalid version read (e8490f4)
- Adjust json files handling (03f7b53)
- adjust local ios solution build (10d193d)
- Adjust lottie error code for missing package (6237c0f)
- Adjust NumberBox styles to use FauxGradientBorderPresenter (4fee50d)
- Adjust PasswordBox styles to use FauxGradientBorderPresenter (0f57962)
- Adjust profile synch and reload on desktop TF selection (d7a9cfb)
- Adjust RepeatButton styles to use FauxGradientBorderPresenter (53572a3)
- Adjust SamplesApp WinUI launch to avoid using XamlRoot too early (ff561eb)
- Adjust sdk invalid globbing (0174847)
- Adjust SplitButton styles to use FauxGradientBorderPresenter (20e8584)
- Adjust startup project on forced reload (d86fbdc)
- Adjust target framework order for window (9b60e26)
- Adjust telemetry persistence (657104e)
- Adjust TextBox styles to use FauxGradientBorderPresenter (0b7fd62)
- Adjust TimePicker styles to use FauxGradientBorderPresenter (de01b3e)
- Adjust ToggleButton styles to use FauxGradientBorderPresenter (9f0aad6)
- Adjust vs build target framework filtering condition (fc2563c)
- Align Loading/Loaded events with WinUI (75bb388)
- Always raise binding value changed when PropertyChanged event is raised (efdd19c)
- Apply fallback color for LinearGradientBrush in unsupported cases on WASM (189122e)
- Apply x:Bind when it's referencing an
x:Load
ed element (f52c3c0) - assets: Always generate a valid BundleResource LogicalName (6891d30)
- Avoid elevation border for ToggleSwitch knob (ec8cdbe)
- Avoid using DependencyObjectStore after it has been disposed (4b0ccfc)
- Avoid using DisplayInformation in WPF renderers (801b063)
- Ban DisplayInformation.GetForCurrentView in Uno solution (ad3c860)
- BitmapSource: seek to the start of the stream when reading (bcaf94a)
- builds fail with latest MSAL updates (d882447)
- Clean ContainersCache properly when MaxDate changes (3916d1b)
- Clipping improvements (61371d4)
- codegen: Properly dedup xaml files (3aff8d8)
- contentpresenter: keep the ContentTemplateRoot if Content is null (ffbe3b9)
- Defer TS compilation to avoid embedding all resources (b56f659)
- Desktop target should not launch console (3d092ed)
- DevServer not included for non-runtime version of .NET (1da224f)
- displayinformation: add edge case for uno islands (614761c)
- Do not inherit DataConttext on PassThroughElement (f9b104c)
- Don't alter TargetFrameworks during a nuget restore (59747b7)
- don't call binding converter with null values unless only the final segment of the path is null (19b0ab5)
- Don't emit/merge empty substitutions file (f97079d)
- Don't fail build on an empty library (54752c5)
- Don't include .json and .config files from the web sdk (bc76e82)
- Don't include App.xaml in Page (198d493)
- Don't reorder TFMs if the uno vsix is not loaded (53df0e8)
- Don't rewrite the target frameworks list on a class library (c1c2583)
- Don't specify Google Android Material with MAUI Embedding (94dfeb3)
- Don't use RemoveControlHost.config in VS (37c6e1b)
- Don't use target platform version in nuspec (8489552)
- droid: ComboBox flyout scroll reset on arrange (80877e8)
- droid: FileOpenPicker sample (3d235c3)
- droid: Geolocator when requested in non-ui thread (9823eac)
- droid: mid-layout listview container index desync (6ca0c73)
- droid: RenderTargetBitmap SIGSEGV (745951f)
- droid: workaround for ItemsControl's ObjectDisposedException (16dedac)
- Enable HW Accel over RDP for Skia Desktop (cc2438c)
- Ensure all platform files are visible by default in VS (029c39a)
- Ensure GTK IsVisible is matching minimized/non-minimized window state (1cbd3c3)
- Ensure ILLinkPack is used on WASM NET8 (a809311)
- Ensure rendering happens when measure/arrange is not dirty (ec588d2)
- Ensure that Platform is specified by default in Release (b07aae4)
- excluding Skia packages without Skia Feature. Include SVG package (288ffb9)
- failing AutomationPeer reference and ScrollItemAdapter implementation (f887682)
- fire Dragover events to accompany DragEnter and Drop (d8051cc)
- Fix
x:Bind
with empty path crashing when x:Load exists in the same page (57429d0) - Fix animation issue when Begin,Stop,Begin are called successively (64d8b9b)
- Fix CalendarView scroll to + recycling issues (d1e2be6)
- Fix ExpressionAnimation not working well with CompositionPropertySet (95d4cad)
- Fix FlipView SelectedIndex not changing with touch swipes on Wasm (942c14b)
- Fix formatting in HRApp (ffc4cfe)
- Fix illinkerpath (03056be)
- Fix Image arrange on Skia to better match WinUI (d103185)
- Fix images being pixelated in some cases (d3c4d42)
- Fix LayoutUpdated on Skia and Wasm (cae0aab)
- Fix mouse wheel not changing FlipView selected item (b0e5a2b)
- Fix pointer re-routing on iOS (a6840e1)
- Fix RectangleClip ignoring TransformMatrix (d8c078c)
- Fix ScrollViewer logic for handling focus and adjust for missing RootScrollViewer (fc5e13c)
- Fix ScrollViewer with touch on Skia causing children to get clicked (034f57e)
- Fix sender argument in Window events and x:Bind in Window when it's root of XAML (9bd9c2e)
- Fix SizeChanged event on Skia and Wasm (4fcd8f1)
- Fix SkiaCompat crashing with SkiaSharp 3 (f0262dc)
- Fix space and enter keys in TB while in ListView (cc5c452)
- Fix style setter generation when Value has binding (88245c9)
- Fix System.Type handling with xmlns (ec23c97)
- Fix the way panel layout clipping is applied (bea89ae)
- Fix UIAsyncOperation threading issue (5c8e9b0)
- Fix WinUI SamplesApp not setting main window correctly (8294b94)
- Fixed linting errors (604d227)
- fixing issue with Source Generator not recognizing Uno Head (2202862)
- Flag image load failures as non-successful (5ca41d3)
- framebuffer: Don't read console input if redirected (1e48708)
- GestureRecognizer should be aborted when InteractionTracker takes over (c313cb5)
- GridView: 1st item fails to render (8227f3a)
- gtk: Fix get scan code in GtkKeyboardInputSource (8ad0fbd)
- Handle Infinity and -Infinity in XAML generator (6bf6da6)
- Handle nested styles correctly in XAML generator (42af020)
- imagebrush: downscaling images was very blurry (288212e)
- include Svg/**/*.svg as Content (1bd8f08)
- Include Uno.Themes.WinUI.Markup for all themes (49a1236)
- Invert Debug.Asserts (f83695f)
- ios: Adjust for duplicate gcparams (d8b7b4d)
- iOS: Don't crash when a native handler fails (299f63f)
- iOS: Geolocator when called from non-ui thread (4638ecb)
- iOS: multiple files selection (bf906b5)
- iOS: multiple videos picker (c21d929)
- iOS: Set PublishFolderType to avoid MSBStrings.E7089 (ef10aca)
- itemsRepeater: Fix an issue where IR might re-position first items if items below are significantly higher (602ea10)
- keyboard inputs not working due to not grabbing focus on uno islands (1503a3f)
- listviewbase: calling UpdateLayout during reordering breaks the ListView (a8f41f1)
- ListView: Fix possible null-ref in selection handling (f5f49c9)
- macos: Let the managed side know about the pointerDeviceType (e0b87bc)
- Make Uno islands ContentIsland compatible with smooth resize (57454d0)
- Markup toolkit dependency must always be included with markup (86cee56)
- Match TextBox.VerticalContentAlignment with Windows (5364b4b)
- Merge substitutions in Release only (32d8705)
- Move state from Layout to LayoutState (91f26c1)
- Move to rewrite the csproj until vs first-TFM issues are fixed (f24b01b)
- net9: Adjust base version for catalyst (2f212eb)
- NETSDK1206 (5e36119)
- pack missing schema file (0d12424)
- perf: Improve perf by adding fast-path for single handlers of events (2e4badf)
- pointers: Fix a tapped event could be raised twice if capturing pointer and a nested element also subscribe to tapped event. (b5203d5)
- prevent invalid references when referenced by WinUI head (e444ad0)
- prevent WinAppSdk bundling for libraries (4a90251)
- properly lookup the Uno Version from the Manifest (a10f313)
- Publish native macos assets for the samplesapp (707ba69)
- read gtk window height correctly on WSL (af510f6)
- Reduce log level in framework sync (aceddbf)
- reg: Fix gesture events not raise in case of pt evt rerouting (12427ca)
- reg: Fix InteractionTracker regression when it has null Owner (466c699)
- reg: Fix SelectorItem remains in pressed state when srcolling kicks-in (bc4b9e3)
- reg: Patch regresssion #16176 (4206cce)
- Remove duplicate RadioButton_IsEnabled_Automated test (988da0b)
- Remove svg package from wasm head (c1c62fe)
- remove TextBox._isTextChangedPending and remove TextBox.IsUserModifying and send it with the TextChangedEventArgs instead (a60f288)
- repeater: Disable non supported animation (32f9291)
- Report AppWindowTitleBar customization as not supported (6e9d6bf)
- Respect CenterPoint when applying rotation (e57b6be)
- Restore non-DP support in setters (fb64c17)
- Restore Setter Value generation outside styles (behavior should be revised in future) (6adfa1b)
- Revert "Ensure rendering happens when measure/arrange is not dirty" (cd7a389)
- Run UnoAssetsGeneration at design time (440ea5a)
- scrollviewer: trim overscrolling after SizeChanged (587519e)
- SDK ignores GeneratePackageOnBuild (7cd3e98)
- sdk: Don't reorder using a non-existing TargetFramework (bdd93c3)
- selection scrolling & ScrollIntoView (208e8d8)
- selectoritem: dragging wouldn't work if the pointer was pressed near the edge of the item (63a6dc3)
- selector: removing an item sometimes clear the current selection (6003431)
- skia: ResourceLoader culture resolution (a5d845f)
- Slider tool tip contains "f" for decimal values (dd478ac)
- sp: Rewrite
TargetFrameworks
using exact TF matching (75dda61) - Square around ColorPicker thumbs (1697fde)
- Support method reference and typeof in UnoNotImplementedAnalyzer (7588462)
- Support preserving DP values when type replacement happens in HR (67b5f8d)
- surfacebrush: check that the final size isn't empty before resizing images. (73ea737)
- Tap to Click behavior on macOS laptops (586de84)
- textbox: \t renders as a weird character (6d6b53d)
- textbox: add ctrl+ins and shift+ins to copy/paste (bb17c68)
- textbox: dancing textbox selection (8596fc2)
- textbox: fix enter not working in multiline textbox (f4aac4f)
- TextBox: Fix TwoWay binding on TextBox.Text not updating properly when unfocused (7456699)
- textbox: multiline paste didn't move the selection to the end of the paste text (601d59b)
- textbox: pasting should not clear undo/redo history (e7dccd2)
- textbox: pasting should scroll the textbox to the end of the pasted content (3730ecb)
- textbox: textbox selection with ligatures (0800ff7)
- textbox: textbox vertical scrolling not following the caret (ddca51c)
- Throw exception on invalid color instead of falling back to Red (2b37819)
- tooltip: prevent multiple nested tooltips from displaying all at once (6dba619)
- Track startup projects to refresh the profile observer (e251052)
- treeview: initial selection being discarded (ab0f874)
- treeview: when PreparingContainerForItemOverride, the container should read IsExpanded from the TreeViewNode, not the other way around (4cd1923)
- Uno packages not included for non-runtime target (4027d40)
- Updated TOC and docs (6ce0406)
- Updating SkiaCompositionSurface's image should invalidate render (f9e619b)
- Use EnumerateAncestors in CompleteGesturesOnTree (5e85302)
- use TaskHost in VS to force unloading of tasks binaries (f3598fc)
- use the correct path for a scale icon (1a6701b)
- Validate disable implicit using (b932eba)
- virtualizingpanel: remove containers from the visual tree when recycled even if cached (8fef29f)
- visualstates: correctly roll back properties when moving from one visual state to the next (63c0176)
- visualstates: fix rolling back properties when the "next state" doesn't modify a property, but modifies one of its subproperties (f739794)
- vsix: Don't close opened files when reloading the project (1fb4f52)
- vsix: Import HierarchyId for proper well known values alignment (54e1157)
- vsix: preserve the selected profile when chosen first (c4873dc)
- WindowChrome should not be a tab stop (79a6a57)
- Windows SkiaSharp Views condition should match Uno condition (3ca78eb)
- Work around issue #16505 (2c6f271)
- workaround for AcrylicBrush pink background on macOS/arm64 (739370b)
- wpf: Fix IsLeftButtonPressed status on WPF platform (f14fa0c), closes /github.com/unoplatform/uno/pull/16378/files#r1575262313
- wpf: going fullscreen then exiting doesn't go back to the previous window state (e771c26)
- wpf: move wpf themes to code-behind (0eb2091)
- WPF: Repetitive dispatching on Idle shouldn't block rendering (b823702)
- wrong condition for SkiaSharp Views (3c6357c)
- xbind: don't change any values when DC is null (e3fc905)