【问题标题】:Save scroll state in Windows Phone 8.1 when user navigate between pages当用户在页面之间导航时,在 Windows Phone 8.1 中保存滚动状态
【发布时间】:2015-10-13 00:45:50
【问题描述】:

我在创建解决方案时使用 VS 2013 添加的 Navigation Helper 类在页面之间导航,但大多数控件(如 Pivot、Hub)的滚动状态不像在 Windows Phone 8.x Silverlight 中那样保存。

我应该怎么做才能实现这种行为?我应该自己处理滚动状态并在我返回访问页面时恢复滚动吗?

谢谢。

更新1:

当我返回页面时,我需要保存选定的枢轴/枢纽项目等。

更新 2:

    void navigationHelper_SaveState(obj sender,SaveStateEventArgs e)
    {
    e.PageState["SelectedSection"] = MainHub.SectionsInView;
    }
    void navigationHelper_LoadState(obj sender,LoadStateEventArgs e)        
    {
        if (e.PageState != null)
        {
            var sections = e.PageState["SelectedSection"] as IList<HubSection>;
            if (sections != null && sections.Any())
                MainHub.ScrollToSection(sections[0]);
        }
    }

【问题讨论】:

  • 滚动是什么意思?选定的枢轴或中心项目,或枢轴或中心内项目的滚动查看器位置?
  • 选定的枢轴/枢纽项目。
  • 如果您创建一个新的 Pivot 类型的 Windows Phone 8.1 项目并按原样运行它,您会看到当您从数据透视页面导航到项目页面时它保持选定的数据透视项目的状态并返回。
  • 好的,我在妈妈页面中有集线器。我需要做这样的事情吗? (请参阅更新 2)

标签: scrollviewer windows-phone-8.1


【解决方案1】:

在你使用hub的页面,在构造函数中设置导航缓存模式:

this.NavigationCacheMode = NavigationCacheMode.Enabled;

或在 XAML 中:

<Page
    x:Class="App.HubPage"
    ....
    xmlns:data="using:App.Data"
    NavigationCacheMode="Enabled"
    ....

【讨论】:

  • 我不知道为什么这不是默认行为(尤其是在中心页面上)。很高兴我在按计划通过 NavigationHelper 保存/加载状态之前发现了这一点。
  • 尝试暂停,这种方式没用
【解决方案2】:

更好的使用:

this.NavigationCacheMode = NavigationCacheMode.Required;

之前:

this.InitializeComponent();

并添加:

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    if (e.NavigationMode == NavigationMode.Back)
    this.NavigationCacheMode = NavigationCacheMode.Disabled;
}

从页面中删除返回导航的缓存。

【讨论】:

  • 这实际上是一个非常聪明的技巧。 Imo 比最重要的问题好多了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多