|
|
@@ -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;
|
|
|
}
|
|
|
|