From 8643a904c4efd3cd25597d3b3091f026b51a5bcd Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Wed, 27 May 2015 14:59:15 +0200 Subject: [PATCH] Close menu when window deactivated. --- Perspex.Controls/Menu.cs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Perspex.Controls/Menu.cs b/Perspex.Controls/Menu.cs index d346d90151..a040598f15 100644 --- a/Perspex.Controls/Menu.cs +++ b/Perspex.Controls/Menu.cs @@ -11,6 +11,7 @@ namespace Perspex.Controls using Perspex.Input; using Perspex.LogicalTree; using Perspex.Rendering; + using System.Reactive.Disposables; public class Menu : ItemsControl, IMenu { @@ -49,11 +50,16 @@ namespace Perspex.Controls { base.OnAttachedToVisualTree(root); - var r = root as IInputElement; - this.subscription = r.AddHandler( - InputElement.PointerPressedEvent, - this.RootPointerPressed, - Interactivity.RoutingStrategies.Tunnel); + var topLevel = root as TopLevel; + + topLevel.Deactivated += this.Deactivated; + + this.subscription = new CompositeDisposable( + topLevel.AddHandler( + InputElement.PointerPressedEvent, + this.Deactivated, + Interactivity.RoutingStrategies.Tunnel), + Disposable.Create(() => topLevel.Deactivated -= this.Deactivated)); } protected override void OnDetachedFromVisualTree(IRenderRoot oldRoot) @@ -62,7 +68,7 @@ namespace Perspex.Controls this.subscription.Dispose(); } - private void RootPointerPressed(object sender, PointerPressEventArgs e) + private void Deactivated(object sender, EventArgs e) { foreach (var i in this.GetLogicalChildren().Cast()) {