@@ -55,6 +55,7 @@ public virtual void Attach(IMenu menu)
55
55
Menu . AddHandler ( Avalonia . Controls . Menu . MenuOpenedEvent , this . MenuOpened ) ;
56
56
Menu . AddHandler ( MenuItem . PointerEnterItemEvent , PointerEnter ) ;
57
57
Menu . AddHandler ( MenuItem . PointerLeaveItemEvent , PointerLeave ) ;
58
+ Menu . AddHandler ( InputElement . PointerMovedEvent , PointerMoved ) ;
58
59
59
60
_root = Menu . VisualRoot ;
60
61
@@ -90,6 +91,7 @@ public virtual void Detach(IMenu menu)
90
91
Menu . RemoveHandler ( Avalonia . Controls . Menu . MenuOpenedEvent , this . MenuOpened ) ;
91
92
Menu . RemoveHandler ( MenuItem . PointerEnterItemEvent , PointerEnter ) ;
92
93
Menu . RemoveHandler ( MenuItem . PointerLeaveItemEvent , PointerLeave ) ;
94
+ Menu . RemoveHandler ( InputElement . PointerMovedEvent , PointerMoved ) ;
93
95
94
96
if ( _root is InputElement inputRoot )
95
97
{
@@ -333,7 +335,23 @@ protected internal virtual void PointerEnter(object sender, PointerEventArgs e)
333
335
}
334
336
}
335
337
336
- protected internal virtual void PointerLeave ( object sender , PointerEventArgs e )
338
+ protected internal virtual void PointerMoved ( object ? sender , PointerEventArgs e )
339
+ {
340
+ // HACK: #8179 needs to be addressed to correctly implement it in the PointerPressed method.
341
+ var item = GetMenuItem ( e . Source as IControl ) as MenuItem ;
342
+ if ( item ? . TransformedBounds == null )
343
+ {
344
+ return ;
345
+ }
346
+ var point = e . GetCurrentPoint ( null ) ;
347
+
348
+ if ( point . Properties . IsLeftButtonPressed && item . TransformedBounds . Value . Contains ( point . Position ) == false )
349
+ {
350
+ e . Pointer . Capture ( null ) ;
351
+ }
352
+ }
353
+
354
+ protected internal virtual void PointerLeave ( object ? sender , PointerEventArgs e )
337
355
{
338
356
var item = GetMenuItem ( e . Source as IControl ) ;
339
357
0 commit comments