diff --git a/src/Avalonia.Base/Input/PointerEventArgs.cs b/src/Avalonia.Base/Input/PointerEventArgs.cs index 1f3c726e7b..5cc572198a 100644 --- a/src/Avalonia.Base/Input/PointerEventArgs.cs +++ b/src/Avalonia.Base/Input/PointerEventArgs.cs @@ -65,7 +65,17 @@ namespace Avalonia.Input return default; if (relativeTo == null) return pt; - return pt * _rootVisual.TransformToVisual(relativeTo) ?? default; + + var pointRootVisual = _rootVisual; + if (relativeTo.VisualRoot is { } root + && _rootVisual != root) + { + var screenPoint = _rootVisual.PointToScreen(pt); + pt = relativeTo.VisualRoot.PointToClient(screenPoint); + pointRootVisual = root; + } + + return pt * pointRootVisual.TransformToVisual(relativeTo) ?? default; } ///