diff --git a/src/Perspex.Controls/Menu.cs b/src/Perspex.Controls/Menu.cs index 099f4e2345..1d61f8add1 100644 --- a/src/Perspex.Controls/Menu.cs +++ b/src/Perspex.Controls/Menu.cs @@ -7,6 +7,7 @@ using System.Reactive.Disposables; using Perspex.Controls.Primitives; using Perspex.Controls.Templates; using Perspex.Input; +using Perspex.Input.Raw; using Perspex.Interactivity; using Perspex.LogicalTree; using Perspex.Rendering; @@ -112,7 +113,8 @@ namespace Perspex.Controls _subscription = new CompositeDisposable( pointerPress, - Disposable.Create(() => topLevel.Deactivated -= Deactivated)); + Disposable.Create(() => topLevel.Deactivated -= Deactivated), + InputManager.Instance.Process.Subscribe(ListenForNonClientClick)); var inputRoot = e.Root as IInputRoot; @@ -195,6 +197,20 @@ namespace Perspex.Controls Close(); } + /// + /// Listens for non-client clicks and closes the menu when one is detected. + /// + /// The raw event. + private void ListenForNonClientClick(RawInputEventArgs e) + { + var mouse = e as RawMouseEventArgs; + + if (mouse?.Type == RawMouseEventType.NonClientLeftButtonDown) + { + Close(); + } + } + /// /// Called when a submenu is clicked somewhere in the menu. ///