C#UWP ScrollViewer改变Horizo​​ntalScrollBarVisibility

我有一个滚动查看器定义如下:

 

当我在后面的代码中更改属性Horizo​​ntalScrollBarVisibility时:

 svMain.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled; 

scrollviewer滚动到水平偏移0。

如何防止这种情况,并保留scrollviewer在此更改之前的水平偏移量?

完全未经测试但也许它可以指向正确的方向。

 public double offset = 0.0; 

禁用滚动条之前保存偏移量:

 offset = svMain.HorizontalOffset; svMain.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled; 

禁用后,将偏移值添加回滚动条

 svMain.ChangeView(offset, null, null, false); 

AFAIK,下面是你可以选择的最佳镜头:

XAML:

  

代码隐藏:

 double offset = 0.0; private void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) { offset = GetScrollViewerOffsetProportion(svMain) ; svMain.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden; } public static void ScrollToProportion(ScrollViewer scrollViewer, double scrollViewerOffsetProportion) { if (scrollViewer == null) return; var scrollViewerHorizontalOffset = scrollViewerOffsetProportion * scrollViewer.ScrollableWidth; var scrollViewerVerticalOffset = scrollViewerOffsetProportion * scrollViewer.ScrollableHeight; scrollViewer.ChangeView(scrollViewerHorizontalOffset, scrollViewerVerticalOffset, null); } public static double GetScrollViewerOffsetProportion(ScrollViewer scrollViewer) { if (scrollViewer == null) return 0; var horizontalOffsetProportion = (scrollViewer.ScrollableWidth == 0) ? 0 : (scrollViewer.HorizontalOffset / scrollViewer.ScrollableWidth); var verticalOffsetProportion = (scrollViewer.ScrollableHeight == 0) ? 0 : (scrollViewer.VerticalOffset / scrollViewer.ScrollableHeight); var scrollViewerOffsetProportion = Math.Max(horizontalOffsetProportion, verticalOffsetProportion); return scrollViewerOffsetProportion; } private void svMain_ViewChanging(object sender, ScrollViewerViewChangingEventArgs e) { if (svMain.HorizontalScrollBarVisibility == ScrollBarVisibility.Hidden) { ScrollToProportion(svMain, offset); } }