C#UWP ScrollViewer改变HorizontalScrollBarVisibility
我有一个滚动查看器定义如下:
当我在后面的代码中更改属性HorizontalScrollBarVisibility时:
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); } }