From 38dd4642d1a6aa499f2b285f288cccef438a5e2d Mon Sep 17 00:00:00 2001 From: Dong Bin Date: Wed, 19 Mar 2025 20:32:08 +0800 Subject: [PATCH] fix: fix scroll button memory leakage. --- src/Ursa/Controls/ScrollTo/ScrollToButton.cs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Ursa/Controls/ScrollTo/ScrollToButton.cs b/src/Ursa/Controls/ScrollTo/ScrollToButton.cs index 4b0be69..3e68eb6 100644 --- a/src/Ursa/Controls/ScrollTo/ScrollToButton.cs +++ b/src/Ursa/Controls/ScrollTo/ScrollToButton.cs @@ -2,6 +2,7 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.VisualTree; +using Irihi.Avalonia.Shared.Helpers; using Ursa.Common; namespace Ursa.Controls; @@ -54,11 +55,17 @@ public class ScrollToButton: Button } _scroll = scroll; - _disposable = ScrollViewer.OffsetProperty.Changed.AddClassHandler(OnScrollChanged); + _disposable = _scroll?.GetObservable(ScrollViewer.OffsetProperty).Subscribe(OnScrollChanged); SetVisibility(Direction, _scroll?.Offset); } } + protected override void OnUnloaded(RoutedEventArgs e) + { + base.OnUnloaded(e); + _disposable?.Dispose(); + } + protected override void OnClick() { if (_scroll is null) return; @@ -83,14 +90,13 @@ public class ScrollToButton: Button _scroll = null; } _scroll = scroll; - _disposable = ScrollViewer.OffsetProperty.Changed.AddClassHandler(OnScrollChanged); + _disposable = _scroll?.GetObservable(ScrollViewer.OffsetProperty).Subscribe(OnScrollChanged); SetVisibility(Direction, _scroll?.Offset); } - private void OnScrollChanged(ScrollViewer arg1, AvaloniaPropertyChangedEventArgs arg2) + private void OnScrollChanged(Vector arg2) { - if (arg1 != _scroll) return; - SetVisibility(Direction, arg2.NewValue.Value); + SetVisibility(Direction, arg2); } private void SetVisibility(Position direction, Vector? vector)