@ -314,6 +314,7 @@ namespace Avalonia.Controls
{
base . OnDetachedFromVisualTree ( e ) ;
_ pointerDisposable ? . Dispose ( ) ;
_ pointerDisposable = null ;
}
/// <inheritdoc/>
@ -423,7 +424,7 @@ namespace Avalonia.Controls
protected virtual void OnPaneOpened ( RoutedEventArgs args )
{
EnableLightDismiss ( ) ;
InvalidateLightDismissSubscription ( ) ;
RaiseEvent ( args ) ;
}
@ -528,6 +529,8 @@ namespace Avalonia.Controls
} ;
TemplateSettings . ClosedPaneWidth = closedPaneWidth ;
TemplateSettings . PaneColumnGridLength = paneColumnGridLength ;
InvalidateLightDismissSubscription ( ) ;
}
private void UpdateVisualStateForPanePlacementProperty ( SplitViewPanePlacement newValue )
@ -541,7 +544,7 @@ namespace Avalonia.Controls
PseudoClasses . Add ( _l astPlacementPseudoclass ) ;
}
private void EnableLightDismiss ( )
private void InvalidateLightDismissSubscription ( )
{
if ( _ pane = = null )
return ;
@ -549,19 +552,26 @@ namespace Avalonia.Controls
// If this returns false, we're not in Overlay or CompactOverlay DisplayMode
// and don't need the light dismiss behavior
if ( ! IsInOverlayMode ( ) )
{
_ pointerDisposable ? . Dispose ( ) ;
_ pointerDisposable = null ;
return ;
}
var topLevel = TopLevel . GetTopLevel ( this ) ;
if ( topLevel ! = null )
if ( _ pointerDisposable = = null )
{
_ pointerDisposable = Disposable . Create ( ( ) = >
var topLevel = TopLevel . GetTopLevel ( this ) ;
if ( topLevel ! = null )
{
topLevel . PointerReleased - = PointerReleasedOutside ;
topLevel . BackRequested - = TopLevelBackRequested ;
} ) ;
topLevel . PointerReleased + = PointerReleasedOutside ;
topLevel . BackRequested + = TopLevelBackRequested ;
_ pointerDisposable = Disposable . Create ( ( ) = >
{
topLevel . PointerReleased - = PointerReleasedOutside ;
topLevel . BackRequested - = TopLevelBackRequested ;
} ) ;
topLevel . PointerReleased + = PointerReleasedOutside ;
topLevel . BackRequested + = TopLevelBackRequested ;
}
}
}