Browse Source

fixed to popup to work on logical tree.

pull/405/head
danwalmsley 10 years ago
parent
commit
f7de57f46f
  1. 2
      src/Perspex.Controls/ContextMenu.cs
  2. 25
      src/Perspex.Controls/Primitives/Popup.cs

2
src/Perspex.Controls/ContextMenu.cs

@ -88,7 +88,7 @@
{
_popup = new Popup()
{
[Popup.PlacementTargetProperty] = control,
PlacementTarget = control,
Child = new ContentControl(),
};
}

25
src/Perspex.Controls/Primitives/Popup.cs

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

Loading…
Cancel
Save