|
|
|
@ -7,6 +7,8 @@ using Perspex.Interactivity; |
|
|
|
using Perspex.Metadata; |
|
|
|
using Perspex.Rendering; |
|
|
|
using Perspex.VisualTree; |
|
|
|
using Perspex.LogicalTree; |
|
|
|
using System.Linq; |
|
|
|
|
|
|
|
namespace Perspex.Controls.Primitives |
|
|
|
{ |
|
|
|
@ -170,12 +172,14 @@ namespace Perspex.Controls.Primitives |
|
|
|
|
|
|
|
_popupRoot.Position = GetPosition(); |
|
|
|
|
|
|
|
if (_topLevel != null) |
|
|
|
if (_topLevel == null) |
|
|
|
{ |
|
|
|
_topLevel.Deactivated += TopLevelDeactivated; |
|
|
|
_topLevel.AddHandler(PointerPressedEvent, PointerPressedOutside, RoutingStrategies.Tunnel); |
|
|
|
_topLevel = PlacementTarget.GetSelfAndLogicalAncestors().First(x => x is TopLevel) as TopLevel; |
|
|
|
} |
|
|
|
|
|
|
|
_topLevel.Deactivated += TopLevelDeactivated; |
|
|
|
_topLevel.AddHandler(PointerPressedEvent, PointerPressedOutside, RoutingStrategies.Tunnel); |
|
|
|
|
|
|
|
PopupRootCreated?.Invoke(this, EventArgs.Empty); |
|
|
|
|
|
|
|
_popupRoot.Show(); |
|
|
|
@ -190,8 +194,12 @@ namespace Perspex.Controls.Primitives |
|
|
|
{ |
|
|
|
if (_popupRoot != null) |
|
|
|
{ |
|
|
|
_topLevel.RemoveHandler(PointerPressedEvent, PointerPressedOutside); |
|
|
|
_topLevel.Deactivated -= TopLevelDeactivated; |
|
|
|
if (_topLevel != null) |
|
|
|
{ |
|
|
|
_topLevel.RemoveHandler(PointerPressedEvent, PointerPressedOutside); |
|
|
|
_topLevel.Deactivated -= TopLevelDeactivated; |
|
|
|
} |
|
|
|
|
|
|
|
_popupRoot.Hide(); |
|
|
|
} |
|
|
|
|
|
|
|
@ -210,16 +218,15 @@ namespace Perspex.Controls.Primitives |
|
|
|
} |
|
|
|
|
|
|
|
/// <inheritdoc/>
|
|
|
|
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) |
|
|
|
protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) |
|
|
|
{ |
|
|
|
base.OnAttachedToVisualTree(e); |
|
|
|
base.OnAttachedToLogicalTree(e); |
|
|
|
_topLevel = e.Root as TopLevel; |
|
|
|
} |
|
|
|
|
|
|
|
/// <inheritdoc/>
|
|
|
|
protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e) |
|
|
|
protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e) |
|
|
|
{ |
|
|
|
base.OnDetachedFromVisualTree(e); |
|
|
|
_topLevel = null; |
|
|
|
} |
|
|
|
|
|
|
|
|