Skip to content

Commit 1fe9919

Browse files
committed
fix: side-by-side diff scroll desync on hidden-tab rebuild and tab switch
1 parent 674fd95 commit 1fe9919

1 file changed

Lines changed: 23 additions & 11 deletions

File tree

src/Views/TextDiffView.axaml.cs

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
using Avalonia;
1010
using Avalonia.Controls;
11+
using Avalonia.Controls.Primitives;
1112
using Avalonia.Data;
1213
using Avalonia.Input;
1314
using Avalonia.Interactivity;
@@ -1010,16 +1011,23 @@ public class CombinedTextDiffPresenter : ThemedTextDiffPresenter
10101011
TextArea.LeftMargins.Add(new LineModifyTypeMargin());
10111012
}
10121013

1014+
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
1015+
{
1016+
base.OnApplyTemplate(e);
1017+
1018+
_scrollViewer = e.NameScope.Find<ScrollViewer>("PART_ScrollViewer");
1019+
if (_scrollViewer != null)
1020+
_scrollViewer.Bind(ScrollViewer.OffsetProperty, new Binding("ScrollOffset", BindingMode.TwoWay));
1021+
}
1022+
10131023
protected override void OnLoaded(RoutedEventArgs e)
10141024
{
10151025
base.OnLoaded(e);
10161026

1017-
_scrollViewer = this.FindDescendantOfType<ScrollViewer>();
1027+
ApplyTemplate();
1028+
10181029
if (_scrollViewer != null)
1019-
{
1020-
_scrollViewer.Bind(ScrollViewer.OffsetProperty, new Binding("ScrollOffset", BindingMode.TwoWay));
10211030
_scrollViewer.ScrollChanged += OnTextViewScrollChanged;
1022-
}
10231031
}
10241032

10251033
protected override void OnUnloaded(RoutedEventArgs e)
@@ -1195,25 +1203,29 @@ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs chang
11951203
}
11961204
}
11971205

1206+
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
1207+
{
1208+
base.OnApplyTemplate(e);
1209+
1210+
_scrollViewer = e.NameScope.Find<ScrollViewer>("PART_ScrollViewer");
1211+
if (_scrollViewer != null)
1212+
_scrollViewer.Bind(ScrollViewer.OffsetProperty, new Binding("ScrollOffset", BindingMode.OneWay));
1213+
}
1214+
11981215
protected override void OnLoaded(RoutedEventArgs e)
11991216
{
12001217
base.OnLoaded(e);
12011218

1202-
_scrollViewer = this.FindDescendantOfType<ScrollViewer>();
1219+
ApplyTemplate();
1220+
12031221
if (_scrollViewer != null)
1204-
{
12051222
_scrollViewer.ScrollChanged += OnTextViewScrollChanged;
1206-
_scrollViewer.Bind(ScrollViewer.OffsetProperty, new Binding("ScrollOffset", BindingMode.OneWay));
1207-
}
12081223
}
12091224

12101225
protected override void OnUnloaded(RoutedEventArgs e)
12111226
{
12121227
if (_scrollViewer != null)
1213-
{
12141228
_scrollViewer.ScrollChanged -= OnTextViewScrollChanged;
1215-
_scrollViewer = null;
1216-
}
12171229

12181230
base.OnUnloaded(e);
12191231
GC.Collect();

0 commit comments

Comments
 (0)