在具有子项目页面的中心视图应用程序中,我的问题是当我导航到子项目详细信息页面,然后使用命令导航返回时,视图始终返回到页面根中心部分01。
如何将 MainHub 页面返回到最初转到子页面的原始调用部分?
我的研究毫无结果。我不认为快照是我的答案,但嘿,任何建议都是值得赞赏的。
如果这是一个非常简单的问题,我深表歉意,但是...
感谢。
好的,谢谢你的回答。在研究了这个问题三天后,我找到了解决方案,但还没有完全的答案。
这。NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
通过启用导航缓存,页面将返回到其发件人位置。但是,我仍然希望返回到中心根页面的特定部分。如果有人仍然有关于如何实现这一目标的信息,我将不胜感激。
季节问候。
这里的新手也发现了MyHub。ScrollToSection(MyHub.Section[0]);
这允许您直接导航到某个部分,从而将其带入当前视图。
我试图找到同一问题的答案。这是我到目前为止发现的。我欢迎任何更好的解决办法。
选项 1
为页面启用缓存。请注意,这必须在页面构造函数或 XAML 中设置。这将增加内存使用量,但会在导航回缓存页面时提高应用的性能。
this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
更多信息请见:http://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.ui.xaml.controls.page.navigationcachemode.aspx
选项 2
在页面导航之间手动保存控件状态。下面的示例使用默认情况下添加到新 Windows 应用商店项目中的导航帮助程序类。
private void OnNavigationHelperSaveState(obj sender, SaveStateEventArgs e)
{
e.PageState["SelectedSection"] = this.MainHub.SectionsInView;
}
private void OnNavigationHelperLoadState(obj sender, LoadStateEventArgs e)
{
if (e.PageState != null)
{
var sections = e.PageState["SelectedSection"] as IList<HubSection>;
if (sections != null && sections.Any())
{
this.MainHub.ScrollToSection(sections[0]);
}
}
}
更多信息请点击此处:http://msdn.microsoft.com/en-gb/library/windows/apps/hh986968.aspx
获取中心的后代滚动查看器并注册到滚动更改事件,存储 scrollOffset 并在用户导航回页面后立即通过将值应用于中心的滚动查看器来还原它们。
我想您必须注册到中心的加载事件才能获得降序滚动查看器(您可以使用 WinRt XAML 工具包中的扩展方法,该方法允许您按类型获取后代(例如滚动查看器)
问候!
你可以用这个删除un back堆栈:
if(this.Frame.CanGoBack)
{
this.Frame.BackStack.RemoveAt(0);
}
你试过我的建议吗?
不幸的是,Hub 无法扩展以执行此操作并访问其滚动查看器,因此您必须使用附加的属性或在您的页面中执行此操作.cs .
首先,为中心的 Loaded 事件注册处理程序。在处理程序中,你将获得降序滚动查看器(也许在 WINRT XAML 工具包的帮助下)并注册它的 ViewChanged 事件。您可以将您喜欢的参数存储在页面导航中不会删除的位置,并在向后导航时恢复并将它们附加到滚动查看器。
我可以在下午给你示例代码。
问候
这不是一个荒谬的要求。试试这个:
public static class Concurrency
{
public static HubSection GotoSection { get; set; }
}
public class MainPage : Page
{
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (Concurrency.GotoSection != null)
MainHub.ScrollToSection(Concurrency.GotoSection);
Concurrency.GotoSection = null;
base.OnNavigatedTo(e);
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
Concurrency.GotoSection = MainHub.SectionsInView.First();
base.OnNavigatedFrom(e);
}
}
this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
可能不是正确解决方案的原因是,你可能希望刷新中心。如果详细信息页面导致编辑(尤其是删除),则后退导航将显示过时的数据,并在用户与死数据交互时使应用处于意外状态。
祝你好运!
初始化时在页面上启用缓存模式
public MainHubPage()
{
. .......
this.NavigationCacheMode = NavigationCacheMode.Enabled;
.......
}
您需要将 Loaded 方法添加到 Page 构造函数。
MainHub.Loaded += async (s, e) => await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
//here you can scroll
MainHub.ScrollToSection(Loyaltysection);
});