Browse Source

Use parent toplevel from PopupRoot

pull/7902/head
Luis von der Eltz 5 years ago
parent
commit
85363e7972
  1. 7
      src/Avalonia.Controls/Primitives/PopupRoot.cs
  2. 14
      src/Avalonia.Diagnostics/Diagnostics/Views/MainWindow.xaml.cs

7
src/Avalonia.Controls/Primitives/PopupRoot.cs

@ -16,7 +16,6 @@ namespace Avalonia.Controls.Primitives
/// </summary>
public sealed class PopupRoot : WindowBase, IInteractive, IHostedVisualTreeRoot, IDisposable, IStyleHost, IPopupHost
{
private readonly TopLevel _parent;
private PopupPositionerParameters _positionerParameters;
/// <summary>
@ -46,7 +45,7 @@ namespace Avalonia.Controls.Primitives
public PopupRoot(TopLevel parent, IPopupImpl impl, IAvaloniaDependencyResolver? dependencyResolver)
: base(ValidatingPopupImpl.Wrap(impl), dependencyResolver)
{
_parent = parent;
ParentTopLevel = parent;
}
/// <summary>
@ -72,6 +71,8 @@ namespace Avalonia.Controls.Primitives
/// </summary>
IStyleHost? IStyleHost.StylingParent => Parent;
public TopLevel ParentTopLevel { get; }
/// <inheritdoc/>
public void Dispose()
{
@ -90,7 +91,7 @@ namespace Avalonia.Controls.Primitives
PopupPositionerConstraintAdjustment constraintAdjustment = PopupPositionerConstraintAdjustment.All,
Rect? rect = null)
{
_positionerParameters.ConfigurePosition(_parent, target,
_positionerParameters.ConfigurePosition(ParentTopLevel, target,
placement, offset, anchor, gravity, constraintAdjustment, rect);
if (_positionerParameters.Size != default)

14
src/Avalonia.Diagnostics/Diagnostics/Views/MainWindow.xaml.cs

@ -162,21 +162,15 @@ namespace Avalonia.Diagnostics.Views
}
var root = vm.PointerOverRoot as TopLevel;
IControl? parent = root;
while (parent?.Parent != null)
{
parent = parent.Parent;
}
if (parent != null)
if (root is null)
{
root = parent as TopLevel;
return;
}
if (root is null)
if (root is PopupRoot pr && pr.ParentTopLevel != null)
{
return;
root = pr.ParentTopLevel;
}
switch (e.Modifiers)

Loading…
Cancel
Save