Browse Source

Use the owner window's screen as the constraint. (#15910)

#14982 added some logic from WPF to contrain a window showed with `WindowStartupLocation.CenterOwner` to the screen, but it had a bug: the screen used was the screen that the window being _shown) is currently on, not the _owner_ window.

This means that if the owner window is on a different screen to the window being shown then it will be constrained to the wrong screen.

You can see this on Windows by showing a child `Window` with `CenterOwner` when the owner window is on a secondary screen: the child window will initially be shown on the primary screen and so the constraint will be wrong, resulting in the child window being shown on the wrong screen.
Steven Kirk 1 năm trước cách đây
mục cha
commit
f0226b70fe
1 tập tin đã thay đổi với 1 bổ sung1 xóa
  1. 1 1
      src/Avalonia.Controls/Window.cs

+ 1 - 1
src/Avalonia.Controls/Window.cs

@@ -976,7 +976,7 @@ namespace Avalonia.Controls
                     PixelSize.FromSize(ownerSize, scaling));
                 var childRect = ownerRect.CenterRect(rect);
 
-                if (Screens.ScreenFromWindow(this)?.WorkingArea is { } constraint)
+                if (Screens.ScreenFromWindow(owner)?.WorkingArea is { } constraint)
                 {
                     var maxX = constraint.Right - rect.Width;
                     var maxY = constraint.Bottom - rect.Height;