@@ -28,6 +28,8 @@ public sealed partial class GridLayoutPage : BaseGroupableLayoutPage
2828
2929 // Properties
3030
31+ public ScrollViewer ? ContentScroller { get ; private set ; }
32+
3133 protected override ListViewBase ListViewBase => FileList ;
3234 protected override SemanticZoom RootZoom => RootGridZoom ;
3335
@@ -147,7 +149,9 @@ protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
147149
148150 private void LayoutSettingsService_PropertyChanged ( object ? sender , PropertyChangedEventArgs e )
149151 {
150- // TODO keep scroll position when changing styles (see details view)
152+ // Get current scroll position
153+ var previousHorizontalOffset = ContentScroller ? . HorizontalOffset ;
154+ var previousVerticalOffset = ContentScroller ? . VerticalOffset ;
151155
152156 if ( e . PropertyName == nameof ( ILayoutSettingsService . ListViewSize ) )
153157 {
@@ -175,6 +179,9 @@ private void LayoutSettingsService_PropertyChanged(object? sender, PropertyChang
175179
176180 FolderSettings_IconHeightChanged ( ) ;
177181 }
182+
183+ // Restore correct scroll position
184+ ContentScroller ? . ChangeView ( previousHorizontalOffset , previousVerticalOffset , null ) ;
178185 }
179186
180187 private async void FolderSettings_LayoutModeChangeRequested ( object ? sender , LayoutModeEventArgs e )
@@ -249,6 +256,11 @@ private void SetItemContainerStyle()
249256 }
250257 }
251258
259+ private void FileList_Loaded ( object sender , RoutedEventArgs e )
260+ {
261+ ContentScroller = FileList . FindDescendant < ScrollViewer > ( x => x . Name == "ScrollViewer" ) ;
262+ }
263+
252264 protected override void FileList_SelectionChanged ( object sender , SelectionChangedEventArgs e )
253265 {
254266 base . FileList_SelectionChanged ( sender , e ) ;
0 commit comments