736 Commits

Author SHA1 Message Date
Julien Lebosquain 2185ce04e7 Use KeySymbol for AccessKey (#20662)
* Change AccessText.AccessKey to a string

* Use KeySymbol for AccessKey

* Update API suppressions

* Fix tests
2026-02-13 09:18:59 +00:00
Steven Kirk d9a6ae517f Hide binding plugins and disable Data Annotations validation by default (#20623)
* Make binding plugin API internal.

Making everything pluggable like has performance implications even if the plugins are never customized (which will be the 99% case).

`IPropertyAccessor` is used in `CompiledBindingPathBuilder` so needs to be kept public for the moment.

* Disable Data Annotations validation by default.

It [conflicts with `CommunityToolkit.Mvvm`](https://github.com/AvaloniaUI/Avalonia/issues/8397) which is now the default MVVM framework, so require it to be enabled in the `AppBuilder`.

* Update API supressions.

* Add back missing using

---------

Co-authored-by: Julien Lebosquain <julien@lebosquain.net>
2026-02-11 17:36:04 +00:00
Jan Kučera a48c415026 FindAncestorOfType and FindDescendantOfType with predicates (#20661)
* Find ancestors/descendants with a predicate

* Use Predicate instead of Func

* Find ancestors/descendants with a predicate

* Use Predicate instead of Func

* Predicate<Visual> to Predicate<T>

---------

Co-authored-by: Jan Kučera <miloush@users.noreply.github.com>
2026-02-11 11:03:49 +00:00
Jan Kučera 08fcb8b1c2 Capture source change notification (#20656)
* Fire CaptureChanging event when source changes

* Do not notfiy platform if only source changed

* Notify ancestors of element to be captured if none yet

* Pointer capture notify on source change tests

---------

Co-authored-by: Jan Kučera <miloush@users.noreply.github.com>
2026-02-10 09:42:31 +00:00
Nikita Tsukanov 697cba7193 Composition system SP1 (#20497)
* baseline benchmark

* Composition system SP1

* Allow reusing the same BitmapCache object for multiple visuals

* Fix warnings

* Address review

* API suppressions

---------

Co-authored-by: Julien Lebosquain <julien@lebosquain.net>
2026-02-06 11:15:47 +00:00
Steven Kirk 70f3bef705 Add CompiledBinding.Create factory methods from LINQ expressions (#20443)
* Reminder for future me.

* Move compiled bindings to Avalonia base.

* Update suppressions.

* Tweaked `BindingExpressionVisitor`.

And documented public (internal) API.

* Fix ncrunch config.

* Add comprehensive unit tests for BindingExpressionVisitor.

Tests cover all supported features including property access, indexers,
AvaloniaProperty access, logical NOT, stream bindings, and type operators.
Also includes tests for unsupported operations that should throw exceptions.

Discovered bug: IsAssignableFrom check at line 139 is backwards, causing
upcasts to incorrectly throw and downcasts to be incorrectly ignored.
Bug is documented with skipped tests showing expected behavior and passing
tests documenting current broken behavior.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Fix backwards IsAssignableFrom check in BindingExpressionVisitor.

Fixed the inheritance cast check which was inverted, causing:
- Upcasts (derived→base) to incorrectly throw exceptions
- Downcasts (base→derived) to be incorrectly ignored

Changed line 139 from:
  node.Operand.Type.IsAssignableFrom(node.Type)
to:
  node.Type.IsAssignableFrom(node.Operand.Type)

This correctly identifies safe upcasts (which are ignored) vs unsafe
downcasts (which throw exceptions).

Updated tests to remove skip attributes and removed the temporary tests
that documented the broken behavior. All 33 tests now pass.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Allow downcasts and all reference type casts in binding expressions.

Changed the cast handling to allow both upcasts and downcasts for reference
types. This makes casts actually useful in binding expressions while still
rejecting value type conversions that would require actual conversion logic.

The logic now checks:
- Both types must be reference types (not value types)
- One type must be assignable to/from the other (either direction)

This allows practical scenarios like:
- Upcasts: (BaseClass)derived
- Downcasts: (DerivedClass)baseInstance
- Casting through object: (TargetType)(object)source

The binding system will gracefully handle any runtime type mismatches.

Updated tests to verify downcasts are allowed and added test for casting
through object pattern.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Add clarifying test for cast transparency in binding expressions.

Added test showing that casts are transparent in property chains.
For example, ((TestClass)x).Property produces just one node for the
property access - the cast doesn't create additional nodes.

This clarifies that empty nodes for (TestClass)x is correct behavior:
- Empty nodes = bind to source directly
- The cast is just a type annotation, transparent to the binding path

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Fix: Casts should create ReflectionTypeCastNode, not be transparent.

Casts were incorrectly being treated as transparent (not creating nodes),
but CompiledBindingPath uses TypeCastPathElement which creates FuncTransformNode.
For consistency and correctness, BindingExpressionVisitor should also create
cast nodes using ReflectionTypeCastNode.

Changes:
- Convert expressions now create ReflectionTypeCastNode
- TypeAs expressions now create ReflectionTypeCastNode
- Both upcasts and downcasts create nodes (runtime checks handle failures)

Examples:
- x => (TestClass)x → 1 node (cast)
- x => ((TestClass)x).Prop → 2 nodes (cast + property)
- x => x.Child as object → 2 nodes (property + cast)

This matches the behavior of CompiledBindingPathBuilder.TypeCast<T>().

Updated all related tests to verify cast nodes are created.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Use compiled cast functions instead of reflection-based type checks.

Changed from ReflectionTypeCastNode (which uses Type.IsInstanceOfType) to
FuncTransformNode with a compiled cast function. This matches how
CompiledBindingPath handles TypeCastPathElement and provides better
performance by avoiding reflection.

The CreateCastFunc method compiles an expression `(object? obj) => obj as T`
which generates efficient IL similar to the 'is T' pattern used in
TypeCastPathElement<T>, rather than using reflection-based type checks.

Performance improvement:
- Before: Type.IsInstanceOfType() reflection call for each cast
- After: Compiled IL using 'as' operator (same as TypeCastPathElement<T>)

Updated tests to expect FuncTransformNode instead of ReflectionTypeCastNode.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Reuse TypeCastPathElement<T> cast function directly.

Instead of compiling our own cast expression, extract the Cast delegate
directly from TypeCastPathElement<T>. This ensures we use the exact same
code path as CompiledBindingPath, avoiding any potential behavioral
differences and code duplication.

Benefits:
- Code reuse - single implementation of cast logic
- Consistency - same behavior as CompiledBindingPathBuilder.TypeCast<T>()
- No duplicate expression compilation logic

Implementation uses reflection to create the closed generic type and
extract the pre-compiled Cast delegate, which is still more efficient
than reflection-based type checks at runtime.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Revert to lambda compilation approach for cast functions.

Reverted from using TypeCastPathElement<T> back to compiling lambda
expressions directly. The lambda approach is cleaner and more straightforward:

Benefits of lambda compilation:
- No Activator.CreateInstance call (avoids reflection for construction)
- More direct - creates exactly what we need
- No coupling to TypeCastPathElement internal implementation
- Simpler code flow

The compiled lambda generates the same efficient IL code (using 'as' operator)
as TypeCastPathElement<T> does, just without the indirection.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Code cleanup: Fix XML docs and remove unused usings.

- Changed CreateCastFunc XML docs to use <remarks> tag for better formatting
- Removed unused 'using Avalonia.Data;' from tests
- Removed redundant '#nullable enable' from tests

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Refactor BindingExpressionVisitor to use CompiledBindingPathBuilder.

Changes BindingExpressionVisitor to use CompiledBindingPathBuilder instead of
directly creating ExpressionNode instances, unifying the approach with
compile-time XAML bindings. Adds new BuildPath() method that returns
CompiledBindingPath, while maintaining backwards compatibility through the
existing BuildNodes() wrapper method.

Key changes:
- Replace internal List<ExpressionNode> with CompiledBindingPathBuilder
- Refactor all visitor methods to call builder methods
- Add accessor factory methods and implementations for property access
- Support AvaloniaProperty, CLR properties, arrays, indexers, streams, casts
- Update tests to expect PropertyAccessorNode, StreamNode, ArrayIndexerNode

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Remove CompiledBindingPathFromExpressionBuilder in favor of BindingExpressionVisitor.

Now that BindingExpressionVisitor has been refactored to use
CompiledBindingPathBuilder and provides a BuildPath() method, the test-only
CompiledBindingPathFromExpressionBuilder class is redundant and can be removed.

Changes:
- Replace CompiledBindingPathFromExpressionBuilder.Build() with
  BindingExpressionVisitor<TIn>.BuildPath() in BindingExpressionTests
- Delete CompiledBindingPathFromExpressionBuilder.cs test file
- All 122 tests in BindingExpressionTests.Compiled continue to pass

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Move test-only methods from production code to test extensions.

Removes BindingExpression.Create and BindingExpressionVisitor.BuildNodes
from production code since they were only used by unit tests.

Changes:
- Remove BindingExpression.Create<TIn, TOut> method
- Remove BindingExpressionVisitor.BuildNodes method
- Add BindingExpressionVisitorExtensions in Base.UnitTests
- Add BindingExpressionExtensions in LeakTests
- Add static helper methods in test classes to reduce noise

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Add public CompiledBinding.Create factory methods from LINQ expressions.

Adds two static factory methods to create CompiledBinding instances from
lambda expressions using BindingExpressionVisitor.BuildPath():

- Create<TIn, TOut>(expression, converter, mode)
  Creates binding without explicit source (uses DataContext)

- Create<TIn, TOut>(source, expression, converter, mode)
  Creates binding with explicit source

This provides a type-safe, ergonomic API for creating compiled bindings
from code without string-based paths.

Usage:
  var binding = CompiledBinding.Create(viewModel, vm => vm.Title);
  textBlock.Bind(TextBlock.TextProperty, binding);

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Merge CompiledBinding.Create overloads and add all binding property parameters.

Consolidates the two Create method overloads into a single method with source
as an optional parameter. Adds optional parameters for all CompiledBinding
properties (priority, converterCulture, converterParameter, fallbackValue,
stringFormat, targetNullValue, updateSourceTrigger, delay) per PR feedback.

Properties that default to AvaloniaProperty.UnsetValue (source, fallbackValue,
targetNullValue) use null-coalescing to convert null parameter values.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* (Re-)update suppressions.

* Add missing using.

* Fix ncrunch build.

* Remove file I committed by accident.

* PR feedback.

* Store static members outside generic class.

Based on PR feedback.

---------

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-05 18:28:33 +00:00
Julien Lebosquain 656d691940 Move ConstructorArgumentAttribute and remove BindingMode from ReflectionBinding constructor (#20589)
* Move ConstructorArgumentAttribute to Avalonia.Base assembly

* Move IOptionalFeatureProvider to Avalonia namespace

* Remove BindingMode from ReflectionBinding constructor

* Update API suppressions
2026-02-04 03:14:54 +00:00
Julien Lebosquain 1ee1509352 Fixes several simple TODO12 (#20544)
* Remove obsolete TextInputMethodClient.ShowInputPanel method

* Merge Move and Move private in KeyboardNavigationHandler

* Change Inline.TextDecorations type to AttachedProperty

* Change TextSearch.GetText/SetText parameter to Interactive

* Remove Design.SetPreviewWith overload

* Replace JSWebWorkerClone with JSWebWorker

* Remove StringTokenizer

* Update API suppressions

* Add reflection comment to RenderWorker
2026-01-27 12:55:05 +00:00
Julien Lebosquain 3c88142694 Make Screen abstract (#20529) 2026-01-24 09:41:04 +00:00
Steven Kirk 1086d9b5b0 Move compiled bindings to Avalonia.Base. (#20439)
* Reminder for future me.

* Move compiled bindings to Avalonia base.

* Update suppressions.

* Update API suppressions

---------

Co-authored-by: Julien Lebosquain <julien@lebosquain.net>
2026-01-16 11:52:50 +00:00
Julien Lebosquain c8f59f84af Fix xUnit warnings in AnimationIterationTests (#20459) 2026-01-13 13:55:18 +00:00
Tim Miller e8a0bee928 Null Reference Check for Animation keyframes (#20422)
* Null Reference Check for Animator

* Add Animation_Completes_Gracefully_When_First_KeyFrame_Value_Is_Null

* Use neutralValue
2026-01-13 09:37:06 +00:00
Benedikt Stebner e8424283fe Universal GlyphTypeface implementation (#19852)
* Introduce a universal IGlyphTypeface implementation that does not rely on any platform implementation

* Revert changes

* Fix Android

* Make the test happy

* Fix build

* Update baseline

* Fix naming

* Fix headless

* Move interfaces to dedicated files
Make GlyphTypeface.GlyphCount an integer

* Fix GlyphCount

* Make IGlyphTypeface NotClientImplementable

* Make sure we cache platform typefaces by their desired name, style, weight and stretch

* Update baseline

* Only use IGlyphTypeface

* Fix Android

* Try to clear the buffer before we encode somethimg

* Add needed test font

* Add more unit tests

* Reduce allocations

* Remove Direct2D1 test files

* More tests

* More complete table implementations

* More adjustments

* Use batch APIs

* Handle invalid timestamps

* Update baseline

* Introduce a CharacterToGlyphMap struct for faster access

* Remove AggressiveInlining

* Remove AggressiveInlining

* Make the head table optional for legacy fonts

* Remove Load method. Fix TextBlockTests

* Fix nullables

* Remove redundant folder

* Update Api baseline

* revert diff helper changes

* revert changes

* Use bare minimum font for Headless platform and introduce a test font manager that uses the Inter font for testing.

* Add missing font file for Headless platform

---------

Co-authored-by: Gillibald <stebner@avaloniaui.net>
Co-authored-by: Julien Lebosquain <julien@lebosquain.net>
2026-01-09 15:07:28 +00:00
Steven Kirk 5d3a9c167a Fix BindingExpression.LeafNode throwing when nodes list is empty (#20442)
Make LeafNode property nullable and return null when the binding expression
has no nodes (e.g., when using a constant source with a converter but no path).
This fixes an ArgumentOutOfRangeException that occurred when accessing
LeafNode or Description properties on such bindings.

Fixes #20441

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-09 13:43:55 +00:00
Youssef Victor c9e210eb70 Update to xunit.v3 (#20331)
* Update to xunit.v3

* Little more progress

* More fixes

* Keep VSTest supported

* Adjust Nuke

* Few fixes

* Fix for xunit 2

* Fix GetData override

* Adjust

* Use MTP for xunit 2

* Fix test

* Better fix

* --no-progress

* Few more fixes

* no progress

* Fix test

* Better fix

* TRX

* Move to Directory.Build.props

* Unify on MTP v2

* Update

* Update to stable

* 1.0.1

* 1.0.2

* Fix some warnings

* Fix more warnings

* Fix more warnings
2026-01-08 20:46:44 +00:00
Steven Kirk f2fc8d02f4 Move IBinding to BindingBase and tidy up some binding APIs (#19589)
* Update ncrunch config.

* Tidy up reflection and multi-binding APIs:

- Move `BindingBase` and `MultiBinding` into Avalonia.Base
- `BindingBase` becomes a true base class for all bindings, and contains only the `Instance` method
- Properties common between reflection and compiled bindings are moved into `StandardBindingBase`
- `Binding` is moved to Avalonia.Base and renamed to `ReflectionBinding`
- A compatibility shim for `Binding` remains in Avalonia.Markup
- Remove `IBinding` and `IBinding2`
- Remove `ITreeDataTemplate's usage of `InstancedBinding`
- Remove `NativeMenuBarPresenter`s usage of `InstancedBinding`
- Remove `InstancedBinding` as it is now unused

This required an update to the DataGrid submodule: cell data validation has been temporarily removed as this used `InstancedBinding`.

* `Instance()` => `CreateInstance()`.

The use of "Instance" as a verb is quite unusual apparently ;)

* Seal classes where appropriate.

* Seal classes where appropriate.

* Remove `StandardBindingBase`.

Simply duplicate the members in reflection and compiled binding classes.

* Delete deleted submodule directory.

* Add missing attribute.

Fixes compile error.

* Fix reference to removed class.

* Update suppressions.
2026-01-08 17:33:14 +00:00
Julien Lebosquain c68111294f Enable nullability in Base/Markup/Markup.Xaml unit tests (#20346)
* Enable nullability in UnitTests

* Enable nullability in Base.UnitTests

* Enable nullability in Markup.UnitTests

* Enable nullability in Markup.Xaml.UnitTests
2025-12-29 09:24:49 +00:00
Ge 62597de97c Add support for parsing BoxShadows with color functions (#20321)
* Add support for parsing BoxShadows with colors expressions with parentheses

* Added BoxShadowsTests

* BoxShadow parsing should also respect parentheses

* Add StringSplitter

* Fix test

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* StringSplitter should not accept same bracket pairs

* Returns empty array only when input is null

* Add StringSplitterTests

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-23 11:24:55 +00:00
Julien Lebosquain 64b63fa5d2 Fix common warnings (#20311) 2025-12-19 11:45:30 +00:00
IanRawley 7a340a6579 XYFocus should skip effectively disabled controls (#20241)
* Added failing unit test

* Changed IsValidCandidate to check effective values

---------

Co-authored-by: Julien Lebosquain <julien@lebosquain.net>
2025-12-15 20:09:19 +00:00
Washi 7369175c2d Reduce Allocations in Text Rendering (#20175)
* Reduce allocations for FontFamily.Parse

* Turn Trie data into static data

* Use static lambda in s_cachedLanguage.GetOrAdd

* Make LineBreakEnumerator+LineBreakState a ref struct to avoid allocations

* Use backing field for storing trie data in debug builds
2025-12-15 10:48:51 +00:00
Denis Pleshakov f878d94c4a [Fix] ImmediateRenderer (#20174)
* Fixed invalid renering of controls with non-zero bounds position.
Fixed text clipping of text elements inside LayoutTransformControl.

* Fixed rendering of VisualBrush.

* Fixed control clipping.

* Fixed opacity mask state.

* Reworked to skip rendering of elements out of clip.

* Code cleanup.

* Added unit test.

* Parameters order.

---------

Co-authored-by: PleshakovDV <pleshakovdv@ugpa.ru>
2025-12-05 14:51:49 +00:00
Benedikt Stebner 3e62621aaf Improve FontCollection customization (#19756)
* Improve FontCollection user story

* Make adjustments after review

* Refactor IsFontFile

* Make FontFamilyLoader internal
Make tests happy again

* Update baseline

* Adjust modifier

---------

Co-authored-by: Julien Lebosquain <julien@lebosquain.net>
2025-11-24 16:23:32 +00:00
zacfromaustinpowder 538a4b2993 Added a constructor to FuncMultiValueConverter that takes an IReadOnlyList instead of an IEnumerable (#19936)
Co-authored-by: Max Katz <maxkatz6@outlook.com>
2025-11-13 06:32:29 +00:00
zacfromaustinpowder fee3032a04 Fixed Selector.ValidateNestingSelector not calling overrides when iterating up through parent selectors (#19947)
* Fixed Selector.ValidateNestingSelector not calling overrides when iterating up through parent selectors

Changed ValidateNestingSelector to call recursively, walking up
the hierarchy of parent selectors. This means function overrides
are taken into account when walking up the tree. Now if a
selector has an OrSelector as its parent, it doesn't throw an
exception.

* Updated ToString methods to surround OrSelectors with parenthesis where useful
2025-11-07 16:15:55 +00:00
startewho e294245f01 Handle long file paths in UriFromFilePath (#19955)
* fix long path

* Update UriExtensionsTests.cs

* Update StorageProviderHelpers.cs
2025-11-04 08:44:43 +00:00
Julien Lebosquain ed38536854 Fix PlatformDataTransferItem.TryGetRaw for unknown formats (#19791)
* Add failing test for PlatformDataTransferItem

* Fix PlatformDataTransferItem.TryGetRaw
2025-10-09 05:56:33 +00:00
Jan Kučera aadcd01d55 Do not recapture already captured element (#19740)
* Do not recapture already captured element

* Recapture tests

---------

Co-authored-by: Jan Kučera <miloush@users.noreply.github.com>
2025-10-01 19:22:31 +00:00
Benedikt Stebner 31a8f37223 Make sure the resm scheme is registered before we attempt to parse something (#19629) 2025-09-12 06:15:30 +00:00
Benedikt Stebner 27859b9e54 Rework TextLineImpl.GetTextBounds (#19576)
* Rework TextLineImpl.GetTextBounds

* Minor adjustments

* Fix GlyphRun.GetDistanceFromCharacterHit in cluster hit
2025-09-02 09:35:07 +00:00
Colton 934c0f8349 Fixes duplicate class property registration (#19558)
* Fix ClassBindingManager property dictionary insert

* Prepend ClassPropertyPrefix to key when inserting into registered properties dictionary to be consistent with lookup.

* Added ClassBindingManager unit tests
2025-08-27 18:10:14 +00:00
Benedikt Stebner 5bed0cb7b6 FontLoading adjustments (#19538)
* Adjust FontFamily parsing so non system fonts require a specific format

* Change relative Uri detection so it uses Contains
2025-08-27 14:26:39 +00:00
robloo 6c33fe192a Update Brush.Parse() to Handle all Color Formats (#19526)
* Add unit test for all color format Brush parsing

* Support parsing all known color formats in Brush.Parse()

* Update property syntax

* Remove unnecessary usings

* Use an actual hex color

* Fix new brush test

* Switch order of brush parsing so known color optimizations are used

* Add more documentation comments to KnownColors

* Fix displayed text in BorderPage

InnerBorderEdge not InnerBorder
2025-08-24 19:46:04 +00:00
Emmanuel Hansen 22eb8e6ec3 Focus Traversal Api (#18647)
* add focus traversal

* add control focus search overrides

* fix whitespace

* rebased and updated api

* update tests, make focusmanager constructor public

* fix tests

* fix whitespace issue

* addressed comment

* add more tests

* remove redundant private focus  state. fix tests

* Update FocusManager.cs

* fix constructors

---------

Co-authored-by: Julien Lebosquain <julien@lebosquain.net>
2025-08-24 08:19:21 +00:00
Tom Edwards 3cf8728e24 Fixed TransformGroup.Children collection changes not changing TransformGroup.Value (#19525) 2025-08-23 20:27:22 +00:00
Ondřej Sušovský 21a38e81c4 Fix validation error not being cleared on valid input (#19477)
* Add failing test for binding error not being cleared, when bound value does not change

* Fix clearing binding error
2025-08-19 10:08:25 +00:00
walterlv cb79e5d7bb Fix comment for #19163 (#19469) 2025-08-15 07:31:26 +00:00
walterlv 46d5a693f1 Capture ExecutionContext for Dispatcher.InvokeAsync (#19163)
* Capture ExecutionContext for Dispatcher.InvokeAsync

(cherry picked from commit e41c9272ac45afc31007a8fe26f9f56291b063ef)

* Implement CulturePreservingExecutionContext

* Add IsFlowSuppressed checking

* Add NET6_0_OR_GREATER because only the Restore need it.

* Use `ExecutionContext.Run` instead of `ExecutionContext.Restore`.

* Pass this to avoid lambda capture.

* Use ExecutionContext directly on NET6_0_OR_GREATER

* on NET6_0_OR_GREATER, use Restore so we can get a simple stack trace.

* Add unit tests.

* All test code must run inside Task.Run to avoid interfering with the test

* First, test Task.Run to ensure that the preceding validation always passes, serving as a baseline for the subsequent Invoke/InvokeAsync tests.
This way, if a later test fails, we have the .NET framework's baseline behavior for reference.
2025-08-14 08:44:04 +00:00
Nikita Tsukanov f3b418d435 Implemented Dispatcher.Yield / Dispatcher.Resume (#19370)
* Refactored DispatcherPriorityAwaitable, implemented Dispatcher.Yield

* Picked changes from https://github.com/AvaloniaUI/Avalonia/pull/14212

* Format/compile

* Update API suppressions

---------

Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
Co-authored-by: Julien Lebosquain <julien@lebosquain.net>
2025-08-04 09:30:10 +00:00
oktrue 83eded1c83 Typos fix (#19257)
* vertext -> vertex

* Eqaul -> Equal
2025-07-30 10:08:32 +00:00
Emmanuel Hansen 230159c174 Use captured element if available as source for tap gestures (#19222)
* update mouse test to better simulate clicks on captured controls

* add tap failing test

* use captured element if available as source for tap gestures
2025-07-30 09:34:39 +00:00
Emmanuel Hansen 45cd39829a Add ability to cancel focus change (#18373)
* implement pre events for focus change

* add cancelling api to focus change

* add overload for SetFocusedElement

* add focus redirection

* update with api change requests
2025-06-13 03:50:50 +00:00
Johan Appelgren 66a8d1bfe0 Fix MeasureCore when there's a size constraint and there's a negative margin. (#18462) 2025-05-31 13:23:13 +00:00
Tom Edwards edeca6a4db Fixed transitions with delay but no duration completing instantly (#18929) 2025-05-27 23:29:50 +00:00
Tom Edwards fa9f2237f3 Fixed focus not being cleared when a parent of the focused element is hidden (#18916)
Enabled the relevant test
2025-05-26 07:50:19 +00:00
Emmanuel Hansen 6431b765a1 Pick nearest parent if container query doesn't specify container name (#18707)
* pick nearest parent if container query doesn't specify container name

* add to string overrides for queries
2025-04-23 19:23:46 +00:00
Emmanuel Hansen b8e4be76a3 Fix height queries not matching when container name is set, remove unused query grammer and allow nesting selector in container styles (#18659)
* fix height queries not matching when container name is set, remove unused query grammer

* add unit test for height container queries with name

---------

Co-authored-by: Julien Lebosquain <julien@lebosquain.net>
2025-04-17 09:08:06 +00:00
Julien Lebosquain c3f02518e5 Fix binding null conditional operator not working with AvaloniaProperty (#18583)
* Add failing tests for null conditional operator with AvaloniaPropery

* Fix null conditional operator with AvaloniaProperty
2025-04-03 23:22:41 +00:00
Emmanuel Hansen cecc928dcc Feature - Container Queries (#16846)
* add container queries

* make visual query provider SetSize virtual

* fix container name matching

* add tests

* move border container implementation up to decorator

* move container query demo to ControlCatalog

* make QueryProvider internal

* update container behavior in toplevelRename Query to StyleQuery and make IContainer internal

* fix comment typos

* remove unused usings

* isolate container tests

* update api

* fix tests

* fix no-selector styles in containers being applied all the time

* simplify container search

* add docs to container properties

* addressed api review

* remove weird unmerge cooments

* remove width and height event container subscriptions when visual is detached
2025-04-03 09:02:01 +00:00
Steven Kirk fb5121a42f Null conditional operator in bindings (#18270)
* Update ncrunch config.

* Fix test naming.

* Add BindingExpressionGrammar tests.

We only had tests for the error states, and that was named incorrectly.

* Parse null-conditionals in bindings.

* Initial impl of null conditionals in binding path.

Fixes #17029.

* Ensure that nothing is logged.

* Make "?." work when binding to methods.

* Don't add a new public API.

And add a comment reminding us to make this class internal for 12.0.

* Use existing method.
2025-03-14 13:47:03 +07:00