0

我需要保存 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;
        }

但它并没有恢复它所处的状态。我究竟做错了什么?(我对 Windows 8 很陌生!)

4

2 回答 2

0

恢复滚动查看器的位置在 Loaded 事件中。在您的构造函数中添加一个处理程序:

scrollViewer.Loaded += (sv,event) => ScrollViewerLoaded(sv, event);

(或者通过 XAML)

保存状态,就像你在SaveState(). 按原样加载值LoadState(),而不是立即使用该值缓存它,直到您到达该 Loaded 事件:

void ScrollViewerLoaded(Object sender, RoutedEventArgs event)
{
    mainScrollViewer.ScrollToHorizontalOffset(cachedScrollPosition);
}
于 2014-07-08T20:48:23.637 回答
0

问题可能LoadState在加载任何数据之前调用。如果是这种情况,则没有可滚动的内容,因此您的ScrollToHorizontalOffset呼叫无效。

您没有关于如何加载数据的任何详细信息,因此我无法提出具体建议。但是,一般的解决方案是确保在调用设置滚动位置之前加载所有数据。

于 2013-03-23T00:52:55.187 回答