Windows 8 C#在框架上保存ScrollServiceViewer状态。导航

Windows 8 C#在框架上保存ScrollServiceViewer状态。导航,c#,windows-8,scrollviewer,C#,Windows 8,Scrollviewer,我需要保存ScrollViewer的位置,这样当我导航到一个页面并点击后退箭头时,它仍将保持在原来的位置 我正在使用: protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState) { base.LoadState(navigationParameter, pageState); if

我需要保存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 LoadState(对象导航参数,字典页面状态)
{
LoadState(navigationParameter,pageState);
if(pageState!=null&&pageState.ContainsKey(“滚动位置”))
{
ScrollToHorizontalOffset((双)页面状态[“ScrollPosition”]);
}
}

protected override void SaveState(字典页面状态)
{
base.SaveState(pageState);
pageState[“ScrollerPosition”]=mainScrollViewer.HorizontalOffset;
}
但它并没有恢复到原来的状态。我做错了什么?(我对Windows 8非常陌生!)

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


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

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

scrollViewer.Loaded += (sv,event) => ScrollViewerLoaded(sv, event);
(或交替通过XAML)

将状态保存为
SaveState()
中的状态。按原样加载
LoadState()
中的值,但不要使用该值,而是立即将其缓存,直到到达加载的事件:

void ScrollViewerLoaded(Object sender, RoutedEventArgs event)
{
    mainScrollViewer.ScrollToHorizontalOffset(cachedScrollPosition);
}

谢谢你的回复。最后,我在LayoutWarePage中设置了NavigationCacheMode=“Enabled”,这就解决了这个问题。
void ScrollViewerLoaded(Object sender, RoutedEventArgs event)
{
    mainScrollViewer.ScrollToHorizontalOffset(cachedScrollPosition);
}