General
Read our release blog post for more information about Avalonia 12!
Useful links:
What's Changed
Changes since 12.0.0-rc2
- CompositionAnimation fixes by @zxbmmmmmmmmm in #20936
- AvnAccessibilityElement fixes by @jmacato in #21062
- Measure/Arrange TextPresenter with WidthIncludingTrailingWhitespace by @Gillibald in #21067
- Fix/linux atspi backend by @jmacato in #21072
- Post NSAccessibility notifications for property changes on macOS by @jmacato in #21074
- Fix access keys not working when KeySymbol is null by @NathanDrake2406 in #21077
Full Changelog since 12.0.0-rc2: 12.0.0-rc2...12.0.0
Changes since 11.3.13
- Design improvements by @maxkatz6 in #18300
- Add ability to cancel focus change by @emmauss in #18373
- [X11] Added INCR support by @kekekeks in #18428
- Don't round size in TextBlock when UseLayoutRounding is false by @appel1 in #18456
- Fix MeasureCore when there's a size constraint and there's a negative… by @appel1 in #18462
- Focus Traversal Api by @emmauss in #18647
- Make sure that tests inherit from ScopedTestBase by @kekekeks in #18690
- Update bug_report.yml by @timunie in #18711
- Fix typo in PseudoClassesExtensions class name by @zdpcdt in #18717
- feat: add TreeViewItemIndentConverter for dynamic margin calculation by @zdpcdt in #18718
- Limit use of deprecated Android display API by @emmauss in #18722
- Move android app initialization to custom application class by @emmauss in #18756
- Add IAddChild to StyleBase to fix IDE errors when adding Style as children to ContainerQuery by @wieslawsoltes in #18800
- Added missing class event handler methods by @TomEdwardsEnscape in #18837
- fix WrapPanel comments by @ingts in #18862
- Fixed core
GotFocusandLostFocushandling being skippable by @TomEdwardsEnscape in #18868 - Add IActivityApplicationLifetime for android by @emmauss in #18893
- Fixes accumulated glitches in GpuInterop demo by @kekekeks in #18900
- Add
DrawingImage.Viewboxby @TomEdwardsEnscape in #18913 - Bump ImageSharp to 2.1.10 by @drasticactions in #18924
- Update azure-pipelines.yml (#18876) by @Gillibald in #18940
- fix: Prevent DXGI from intercepting Alt+Enter and PrintScreen by @M0n7y5 in #18970
- [Android] Do not underutilize CPU/GPU when can't keep up with refresh rate by @kekekeks in #18973
- [ANDROID] Skip glWaitClient/glWaitGL/glWaitNative by @kekekeks in #18974
- Implement IDispatcherImpl for Android based on Looper and MessageQueue by @kekekeks in #18975
- [12.0] Target SkiaSharp 3.0. Drop 2.88 support by @maxkatz6 in #18981
- Remove old linux hack by @kekekeks in #18989
- Switch to using animation request for scroll inertia dispatch by @emmauss in #18997
- Cleanup InvalidationAwareSurfaceView related code by @maxkatz6 in #19045
- Fix WindowCloseReason Passed During System Shutdown by @lindexi in #19055
- feat: expose Popup property in PopupFlyoutBase for external access. by @zdpcdt in #19106
- Make
CharacterReaderinternal. by @grokys in #19123 - Fix typo:
ExternalGLibMainLoopExceptionLoggerby @Dragorn421 in #19128 - Developer Documentation by @grokys in #19131
- Remove
PropertyPath. by @grokys in #19133 - move to SDK 8.0.411 in global.json by @SimonCropp in #19136
- remove some redundant returns by @SimonCropp in #19137
- remove some duplicate dict lookups by @SimonCropp in #19138
- remove Settings.StyleCop from sln by @SimonCropp in #19140
- remove some un-used code by @SimonCropp in #19146
- Feat/19059 add automation for validation error by @longbuibao in #19161
- Capture ExecutionContext for Dispatcher.InvokeAsync by @walterlv in #19163
- Rename "Documentation" subfolder into "docs" by @maxkatz6 in #19189
- Improved NuGet package creation docs. by @grokys in #19196
- Unify selection event handling for all
SelectingItemsControltypes plusTreeViewby @TomEdwardsEnscape in #19203 - Fix: Unable to input numbers, symbols, and English letters in Avalonia on X11 with fcitx5 ForwardKey messages by @SeWZC in #19207
- Use hard links for build by @MrJul in #19209
- Migrate AvaloniaNameSourceGenerator to IIncrementalGenerator by @maxkatz6 in #19216
- Fix typo in XML documentation for ExtendClientAreaChromeHints enum by @Versette in #19245
- Typos fix by @oktrue in #19257
- Add GroupBox by @maxkatz6 in #19366
- Implemented Dispatcher.Yield / Dispatcher.Resume by @kekekeks in #19370
- Commit missing resource values by @maxkatz6 in #19371
- Use VisualBrush for GroupBox Border by @drasticactions in #19372
- [v12] Enable Mac Catalyst in Avalonia.iOS by @drasticactions in #19415
- Update release instructions by @MrJul in #19417
- Text API sample app by @miloush in #19455
- Increase RemoteProtocolTests timeout by @MrJul in #19461
- Fix comment for #19163 by @walterlv in #19469
- Removed locks from Ref by @kekekeks in #19476
- Improved API diff by @MrJul in #19490
- Font features in test app by @miloush in #19493
- Avoid processing frameworks in parallel in ValidateApiDiff by @MrJul in #19511
- Fix BitmapInterpolationMode.HighQuality when downscaling by @MrJul in #19513
- Update Nuke to v9 and fix ValidateApiDiff by @MrJul in #19529
- Move
IBindingtoBindingBaseand tidy up some binding APIs by @grokys in #19589 - Ignore empty preeditText when no composition was active before (#19595) by @Gillibald in #19621
- Fix: ChoreographerTimer should check for Android version correctly. by @IsaMorphic in #19643
- DOCS: Add final newline to markdown files by @VbhvGupta in #19645
- Limit InlineUIContainer to available width (#19651) by @Gillibald in #19675
- Move ControlCatalog.MacCatalyst/tvOS to their own folders by @MrJul in #19709
- Enable compiled bindings by default in Avalonia.props by @maxkatz6 in #19712
- Run Avalonia.LeakTests on CI by @pos777 in #19720
- Remove Tizen by @MrJul in #19722
- Implement focus change only on release when using touch or pen input by @emmauss in #19753
- Improve FontCollection customization by @Gillibald in #19756
- Universal GlyphTypeface implementation by @Gillibald in #19852
- Update to .NET 10 by @MrJul in #19869
- Improve
AvaloniaNameIncrementalGeneratorerror handling by @TomEdwardsEnscape in #19934 - Changed FuncMultiValueConverter to take IList instead of IEnumerable by @zacfromaustinpowder in #19936
- Modernise ControlCatalog XAML by @TomEdwardsEnscape in #19971
- [Text] Properly handle DrawableRun.Baseline (#19896) by @Gillibald in #19983
- [DesignerHost/HTML]: improve high-dpi screen behavior by @ijklam in #19996
- feat: Handle Datavalidations on base class "Control" by @timunie in #20067
- Fix TryCreateGlyphTypeface return on macOS with SkiaSharp 2.88 by @MrJul in #20084
- Android - Directly use the surface window handle cached in InvalidationAwareSurfaceView instead of requesting new handles by @emmauss in #20093
- Rewrite leak tests without dotMemory Unit by @MrJul in #20095
- Remove Avalonia.Browser.Blazor by @maxkatz6 in #20105
- Introduce TextOptions by @Gillibald in #20107
- Remove netstandard2.0 from almost all projects by @MrJul in #20111
- Remove Direct2D1 by @MrJul in #20132
- Use Silk.NET in GpuInterop sample by @MrJul in #20133
- Update dependencies by @MrJul in #20139
- [Feature] Move LetterSpacing to TextElement as inherited attached property by @jsuarezruiz in #20141
- Add screen orientation support for Linux DRM by @ThadHouse in #20154
- Improve NuGet.Config by clearing all package source options to make it independent of global NuGet.Config by @Athari in #20169
- Remove obsolete projects from solution filter file by @quanzhuo in #20178
- Fix several issues with ExtendClientAreaToDecorationsHint on Windows by @MrJul in #20217
- Use standalone Bun to build JS projects instead of NodeJS by @maxkatz6 in #20243
- Fix dnx random failures by @MrJul in #20284
- Restore integration tests by @MrJul in #20296
- Add PlaceholderForeground property to TextBox, AutoCompleteBox, CalendarDatePicker, NumericUpDown by @jsuarezruiz in #20303
- Fix common warnings by @MrJul in #20311
- Split analyzers and code fixes into separate projects by @MrJul in #20312
- Update .NET SDK to 10.0.101 by @Youssef1313 in #20322
- Update to xunit.v3 by @Youssef1313 in #20331
- Remove legacy Diagnostics project by @MrJul in #20332
- Delete Direct2D1 test files by @MrJul in #20333
- Update Nuke to v10 by @MrJul in #20345
- Enable nullability in Base/Markup/Markup.Xaml unit tests by @MrJul in #20346
- Fix NRE bug in TextShaperImpl.ShapeText on netstandard2.0 by @adams85 in #20369
- Update NUnit to v4 by @MrJul in #20372
- Enable nullability in Controls.UnitTests by @MrJul in #20373
- Enable nullability in various test projects by @MrJul in #20374
- Enable nullability in Avalonia.Native by @MrJul in #20378
- Enable nullability in all samples by @MrJul in #20379
- Fix ambiguous and dead
inheritdoclinks by @ScrubN in #20397 - Fix Android obsolete warnings by @MrJul in #20412
- Update CODE_OF_CONDUCT.md by @MikeCodesDotNET in #20417
- Handle added packages in API diff by @MrJul in #20428
- Fix some XML doc warnings by @MrJul in #20429
- Fix ncrunch configuration. by @grokys in #20437
- Move compiled bindings to Avalonia.Base. by @grokys in #20439
- Add CompiledBinding.Create factory methods from LINQ expressions by @grokys in #20443
- Fix android wrong inset safe area padding value after resume by @Shirasagi0012 in #20448
- Implement scene delegate for iOS by @MrJul in #20454
- Remove BinaryFormatter by @MrJul in #20455
- Fix for HarfBuzz was missing by @timunie in #20456
- Fix xUnit warnings in AnimationIterationTests by @MrJul in #20459
- Fix Avalonia.Desktop.slnf compiling by @gehongyan in #20461
- Fix NuGet warnings by @MrJul in #20466
- Remove EnableUnsafeBinaryFormatterSerialization property by @MrJul in #20467
- Update headless xUnit support to v3 by @MrJul in #20481
- Composition system SP1 by @kekekeks in #20497
- Enable warnings as errors by @MrJul in #20504
- Fix typo in build.md by @mrlacey in #20513
- Use net8.0 TFM for shipped build props by @kekekeks in #20518
- Remove IInternalScroller and move IScrollable to Avalonia.Base by @MrJul in #20519
- Remove IDataObject to IDataTransfer wrappers and related methods by @MrJul in #20521
- Simplify text formatting constructors by @MrJul in #20527
- Merge IGeometryContext and IGeometryContext2 by @MrJul in #20528
- Make Screen abstract by @MrJul in #20529
- Fix Android surface recreation by @kerams in #20538
- Fix TabItem's Content inheriting TabControl's DataContext instead of TabItem's by @ptasev in #20541
- Fixes several simple TODO12 by @MrJul in #20544
- Add AlphaFormat to ILockedFramebuffer by @MrJul in #20556
- Merge multiple interfaces related to rendering by @MrJul in #20557
- Headless: use HarfBuzz by default by @MrJul in #20561
- Merge IResourceHost2 into IResourceHost by @MrJul in #20576
- Remove NativeMenuItemToggleType and NativeMenuBar.EnableMenuItemClickForwarding by @MrJul in #20577
- Move ConstructorArgumentAttribute and remove BindingMode from ReflectionBinding constructor by @MrJul in #20589
- Fix warnings and index bugs in ControlCatalog sample by @ThadHouse in #20590
- Add IsAlive property to IRef by @MrJul in #20593
- Make NUnit tests visible in Rider again by @MrJul in #20594
- Remove AutoCompleteBox.BindingEvaluator by @MrJul in #20596
- Make IPopupHost a private API by @MrJul in #20597
- Headless NUnit: Handle async SetUp/TearDown by @MrJul in #20612
- Remove obsolete members from Avalonia.Base by @MrJul in #20613
- Remove obsolete members from Avalonia.Controls by @MrJul in #20617
- Hide binding plugins and disable Data Annotations validation by default by @grokys in #20623
- Remove obsolete members from various assemblies by @MrJul in #20628
- Move GetWindowsZOrder to IWindowingPlatform by @MrJul in #20633
- Fix Border clip regression by @kekekeks in #20648
- Use KeySymbol for AccessKey by @MrJul in #20662
- Fixed wrong Mac accessibility roles for List, ListItem, and StatusBar by @codecat in #20681
- Make sure that adorners are actually correctly positioned in visual tree for TransformToVisual and friends by @kekekeks in #20691
- Make TextBox.PlaceholderText accessible by @kirb in #20714
- [macOS] Add NativeDock.Menu API for adding menu items to macOS dock icon by @drasticactions in #20634
- [v12] Android - Remove redundant appbuilder methods in android, use AvaloniaActivity in toplevel classes by @emmauss in #20715
- Introduce PresentationSource, move some responsibilities from TopLevel by @kekekeks in #20624
- Add boundary check to HarfBuzzTextShaper by @rabbitism in #20716
- Update BclLauncher.cs to use ArgumentList property by @tompnub in #19713
- Fixed incorrect opacity stack handling by @kekekeks in #20730
- macOS: Fix file dialogs in embedded views by @MrJul in #20719
- Onboard onto Central Package Management by @dfederm in #20704
- Add tooltips for settings in control catalog by @TeaDrivenDev in #20731
- Handle GlyphTypeface creation exceptions by @MrJul in #20739
- Handle font cmap format 13 by @MrJul in #20740
- More changes for non-toplevel visual tree roots. by @kekekeks in #20732
- Remove unused internal classes, methods, and comparers by @Evan260 in #20746
- Fix menu memory leak by @MrJul in #20753
- Implement AT-SPI2 Accessibility Backend by @jmacato in #20735
- Support ExperimentalAttribute in XAML by @MrJul in #20765
- Fix Toplevel not losing focus with native implementation deactivates. by @emmauss in #20768
- Fix for GhostItems in virtualized ItemsControls like ListBox by @timunie in #20700
- Fixed creation of files/folders in a subfolder, as well as its deletion on Android by @Paulsams in #20750
- Fix CalendarDatePicker becoming unusable when closed programmatically by @Evan260 in #20756
- Make RemoteServer/RemoteWidget internal by @MrJul in #20767
- Use a default DesignEmHeight if the font doesn't have one by @MrJul in #20764
- Make a few more things internal by @MrJul in #20772
- iOS: fix universal link activation with scenes by @MrJul in #20752
- Fix TopLevelHost mirroring RTL content by @MrJul in #20754
- Add AppBuilder.UseTextShapingSubsystem by @MrJul in #20761
- Create DiagnosticTextRenderer lazily by @MrJul in #20766
- Fix font Weight/Stretch matching by @MrJul in #20773
- Fix missing root automation peer in x11/atspi by @jmacato in #20775
- Don't call FormattingObjectPool.VerifyAllReturned by @MrJul in #20774
- CompiledBinding.Create must be AOT-compatible, even by using reflection by @maxkatz6 in #20776
- Don't throw on unexpected iOS input by @kerams in #20728
- Introduce Dispatcher.CurrentDispatcher, Dispatcher.FromThread, AvaloniaObject.Dispatcher by @kekekeks in #18686
- Fix NativeControlHost not accounting for visual transforms in size calculation by @mfkl in #20785
- Move Gesture events to InputElement by @emmauss in #20789
- Themeable Client Window Decorations by @kekekeks in #20770
- Include Avalonia.IntegrationTests.Win32 into desktop slnf by @kekekeks in #20797
- Fix for remaining Ghost-Item in VirtualizationStackPanel by @timunie in #20784
- Fix TextBox validation error persisting when reverting to same valid value by @Evan260 in #20780
- Rename SystemDecorations to WindowDecorations since they aren't necessary "system". by @kekekeks in #20796
- Add PopupOverlayLayer by @MrJul in #20751
- Explicitly truncate when opening a stream for writing by @Frederisk in #20804
- Add gesture CLR events to InputElement by @MrJul in #20806
- Update SkiaSharp to 3.119.3-preview.1.1 by @MrJul in #20809
- Bump Tmds.DBus.Protocol to version 0.90.3 by @jmacato in #20810
- [iOS] Truncate file in IOSStorageFile.OpenWrite by @MrJul in #20807
- Render target/surface housekeeping by @kekekeks in #20811
- [Feature] Page-based navigation system by @jsuarezruiz in #20794
- X11IconLoader needs to scale the icon into our hardcoded size by @kekekeks in #20817
- Streamline drawn decorations management to avoid call ordering problems by @kekekeks in #20840
- [Metal] Dispose GRBackendRenderTarget and @autoreleasepool for metal objects by @drasticactions in #20815
- [Navigation] Fire Page lifecycle events after transitions complete, not before by @drasticactions in #20826
- Fix pixel rounding and visual transforms in NativeControlHost by @mfkl in #20786
- Find perfect match before nearest in font collection by @MrJul in #20851
- Add automation landmarks to HamburgerMenu by @kirb in #20857
- Fix
TabControlDataContextissues when switching tabs by @grokys in #20856 - [Feature] Add PipsPager Control by @jsuarezruiz in #20660
- Update summaries for gesture events in InputElement by @luke-whos-here in #20862
- Disable Animations processing when Visual's not visible redux by @jmacato in #20820
- Translation property for CompositionVisual by @zxbmmmmmmmmm in #20836
- Add FocusChangedEventArgs for GotFocus/LotFocus by @MrJul in #20859
- Made GetMaxSizeFromConstraint a protected method by @codecat in #20877
- Add /update-api and /api-diff commands by @maxkatz6 in #20887
- Remove Uncompilable code guarded by platform defines by @emmauss in #20861
- Use Numerge package by @maxkatz6 in #20892
- Don't tick with render loop when app is idle by @kekekeks in #20873
- Hide TextRange. It has no public usage. by @Gillibald in #20893
- Make SelectionHandleType internal by @emmauss in #20908
- Use the correct flag to determine if extra dirty rect needs to be combined with existing one by @kekekeks in #20896
- Open FocusManager API by @MrJul in #20854
- Allow
TextSearch.TextBindingon non-controls. by @grokys in #20884 - Defer default icon loading until Window is shown by @NathanDrake2406 in #20898
- Validate layoutable Thickness properties to block NaN or infinite values by @TomEdwardsEnscape in #20899
- Update .NET SDK to 10.0.201 by @MrJul in #20912
- New HeadlessWindow.SetRenderScaling API by @maxkatz6 in #20888
- Fix X11IconLoader exception for icons < 128px by @MrJul in #20914
- X11: Fix clipboard bitmap transferred with INCR by @MrJul in #20895
- Fix values of known atoms by @MrJul in #20894
- Add WinForms message filter for Avalonia windows by @MrJul in #20814
- Do not resolve markup extensions when resolving selector types by @dme-compunet in #20903
- [Feature] Add gestures and WrapSelection (loops) support to Carousel by @jsuarezruiz in #20659
- Restructure VisualLayerManager by @kekekeks in #20905
- Added more Carousel samples by @jsuarezruiz in #20932
- Add FindNextElementOptions.FocusedElement by @MrJul in #20930
- Fix Windows Snap in BorderOnly mode by @MrJul in #20937
- Make FlyoutBase.IsOpen a public StyledProperty by @NathanDrake2406 in #20920
- [Feature] Expand Page-type navigation: CarouselPage by @jsuarezruiz in #20871
- Fix TabItem.Icon type and add IconTemplate by @MrJul in #20939
- Allow CanResize on macOS in BorderOnly mode by @MrJul in #20940
- Update Placeholder properties to use TextBox as owner in NumericUpDown & ComboBox by @zdpcdt in #20929
- Remove unnecessary style for fullscreen button by @rabbitism in #20934
- Android - Query date modified for android storage folder by @emmauss in #20860
- #20868 - virtualizingstackpanel, when viewport shrinks and grows agai… by @gentledepp in #20870
- Add IconTemplate to Page and DrawerPage by @jsuarezruiz in #20946
- Change visual brush for group box to grid by @emmauss in #20947
- Make RoutedEvent nullable in event arguments by @MrJul in #20953
- Fixed creating RenderTarget when using Vulkan backend by @abenedik in #20952
- Remove UnstableAttribute from several RoutedEventArgs by @MrJul in #20955
- Make Dispatcher.Yield use the current dispatcher by @MrJul in #20956
- Animation PlaybackBehavior Implementation and Tests. by @jmacato in #20966
- Rename PipsPager button theme APIs by @jsuarezruiz in #20954
- Update packages by @MrJul in #20967
- Revert MicroCom to 0.11.0 by @MrJul in #20975
- Use CurrentDispatcher in DispatcherTimer and AvaloniaSynchronizationContext by @MrJul in #20957
- Make Window.WindowState a direct property with (on some platforms) reliable values by @kekekeks in #20973
- Add StyleKeyOverride for ContentPage by @emmauss in #20977
- Add Page HeaderTemplate by @emmauss in #20982
- Cache RenderScaling in PresentationSource by @MrJul in #20972
- Add StyleOverrides for other Page types by @emmauss in #20985
- X11: Handle ShowActivated=false by @MrJul in #20958
- Design properties not being applied for user controls by @maxkatz6 in #20986
- Fix ComboBox not displaying Text property validation by @ptasev in #20978
- Add more gesture recognizer sample pages to ControlCatalog by @jsuarezruiz in #20983
- QoL for ControlCatalog: add sidebar search, auto-sort, and default page selection by @kekekeks in #20987
- Introduced "forced" CSD mode without app opting in by @kekekeks in #20976
- Use the correct value for animations stopped during a visual tree detach by @MrJul in #20995
- Remove LambdaExpression.Compile from CompiledBinding.Create by @MrJul in #20996
- Add DrawerHeaderTemplate and DrawerFooterTemplate properties to DrawerPage by @jsuarezruiz in #21008
- Include VisualLayerManager itself in layer lookup. by @rabbitism in #20999
- Fix DrawerPage double footer on compact mode for Bottom/Top placement by @jsuarezruiz in #21004
- Fix TabbedPage samples wrong icon by @jsuarezruiz in #21003
- Fix Placeholder not visible by @shine1258 in #21024
- Add SECURITY.md by @rabbitism in #21029
- Added explicit background processing support to managed dispatcher impl by @kekekeks in #21025
- Combine Ready/Corrupted into a single passthrough struct by @kekekeks in #21028
- Change XInternAtoms call force-create atoms by @kekekeks in #21034
- Rename AppBar controls by @jsuarezruiz in #21041
- Apply optimizations in Avalonia Android by @jsuarezruiz in #20968
- Fix Mouse pointer triggering focus change on pointer release. by @emmauss in #21009
- Change DoDragDropAsync trigger event to PointerPressedEventArgs by @MrJul in #20988
- Apply optimizations in Avalonia iOS by @jsuarezruiz in #20969
- Expose allowed titlebar button actions from the platform implementation and respect them from drawn decorations by @kekekeks in #21035
- Do not use visual children enumerator in TopLevelHost by @MrJul in #21048
- Replaced raw COM pointers with smart ones by @kekekeks in #21001
- Update readme.md by @MikeCodesDotNET in #21051
- Touch Improvements to TextBox by @emmauss in #20848
- Add keyboard navigation for overflow CommandBar popup by @jsuarezruiz in #21005
- Improve CommandBar dynamic overflow separator handling by @jsuarezruiz in #21039
- Fix FocusManager.FocusedElement on canceled/redirected focus by @MrJul in #21047
- CompositionAnimation fixes by @zxbmmmmmmmmm in #20936
- AvnAccessibilityElement fixes by @jmacato in #21062
- Measure/Arrange TextPresenter with WidthIncludingTrailingWhitespace by @Gillibald in #21067
- Fix/linux atspi backend by @jmacato in #21072
- Post NSAccessibility notifications for property changes on macOS by @jmacato in #21074
- Fix access keys not working when KeySymbol is null by @NathanDrake2406 in #21077
Full Changelog since 11.3.13: 11.3.13...12.0.0