保存ScrollerViewer状态在Frame.Navigate
本文关键字:Frame Navigate 状态 ScrollerViewer 保存 | 更新日期: 2023-09-27 18:05:18
我需要保存我的ScrollViewer的位置,这样当我导航到一个页面并点击后退箭头时,它仍然会在它原来的位置。
我用:
protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
base.LoadState(navigationParameter, pageState);
if (pageState != null && pageState.ContainsKey("ScrollerPosition"))
{
mainScrollViewer.ScrollToHorizontalOffset((double) pageState["ScrollerPosition"]);
}
}
和
protected override void SaveState(Dictionary<String, Object> pageState)
{
base.SaveState(pageState);
pageState["ScrollerPosition"] = mainScrollViewer.HorizontalOffset;
}
,但它没有恢复到原来的状态。我做错了什么?
问题可能是在加载任何数据之前调用LoadState
。如果是这种情况,没有内容可以滚动,所以您的ScrollToHorizontalOffset
调用没有效果。
你没有任何关于如何加载数据的细节,所以我不能给出具体的建议。但是,一般的解决方案是确保在调用设置滚动位置之前加载所有数据。
恢复滚动查看器的位置在Loaded事件中。在构造函数中添加处理程序:
scrollViewer.Loaded += (sv,event) => ScrollViewerLoaded(sv, event);
(或者通过XAML)
保存状态,因为你有在SaveState()
。加载LoadState()
中的值,因为你有,但不是使用值立即缓存它,直到你得到加载事件:
void ScrollViewerLoaded(Object sender, RoutedEventArgs event)
{
mainScrollViewer.ScrollToHorizontalOffset(cachedScrollPosition);
}