Xaml Win 8.1地铁枢纽导航

Xaml Win 8.1地铁枢纽导航,xaml,c#-4.0,navigation,microsoft-metro,winrt-xaml,Xaml,C# 4.0,Navigation,Microsoft Metro,Winrt Xaml,在具有子项页面的中心视图应用程序中,我的问题是,当我导航到子项详细信息页面,然后使用命令navigate goback时,视图始终返回到pageroot中心section01 如何将MainHub页面返回到最初转到子页面的原始调用部分 我的研究没有结果。我不认为快照是我的答案,但是任何建议都是非常感谢的 如果这是一个非常简单的问题,我很抱歉,但是 Thx.您可以获取集线器的后代scrollviewer并注册scrollchanged事件,存储ScrollOffset,并在用户导航回页面时通过将值

在具有子项页面的中心视图应用程序中,我的问题是,当我导航到子项详细信息页面,然后使用命令navigate goback时,视图始终返回到pageroot中心section01

如何将MainHub页面返回到最初转到子页面的原始调用部分

我的研究没有结果。我不认为快照是我的答案,但是任何建议都是非常感谢的

如果这是一个非常简单的问题,我很抱歉,但是


Thx.

您可以获取集线器的后代scrollviewer并注册scrollchanged事件,存储ScrollOffset,并在用户导航回页面时通过将值应用到集线器的scrollviewer将其还原

我猜您必须注册到集线器的loaded事件才能获得descending scrollviewer(您可以使用的扩展方法允许您按类型获得子体(例如scrollviewer)


您好!

您可以使用以下命令删除反堆栈:

if(this.Frame.CanGoBack)
{
    this.Frame.BackStack.RemoveAt(0);
}

好的。谢谢你的回答。在看了三天这个问题后,我找到了一个解决方案,但不是一个很好的答案

this.NavigationCacheMode=Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;

通过启用导航缓存,页面将返回到其发件人位置。但是,我仍然希望返回到特定部分的中心根页面。如果任何人仍有关于如何实现这一点的信息,我将不胜感激


节日问候。

你试过我的建议了吗

不幸的是,Hub无法扩展以执行此操作并访问其Scrollviewer,因此您必须使用附加属性或在page.cs中执行此操作

首先,为中心的已加载事件注册一个处理程序。在该处理程序中,您将获得递减滚动查看器(可能需要借助WINRT XAML工具包),并注册其ViewChanged事件。 您可以将参数存储在页面导航中不会被删除的位置,并在向后导航时将其还原并附加到scrollviewer

我可以在下午给你示例代码


问候

这里的新手也发现了MyHub。滚动部分(MyHub.Sections[0])


这允许您直接导航到某个分区,从而将其带入当前视图。

这不是一个荒谬的请求。请尝试以下操作:

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;
可能不是正确的解决方案,是因为您可能希望刷新中心。如果详细信息页面导致编辑(尤其是删除)反向导航将显示过时的数据,如果用户与死掉的数据交互,应用程序将处于非意外状态


祝你好运!

我正试图找到同一个问题的答案。这是我迄今为止发现的。我欢迎任何更好的解决方案

选项1

为页面启用缓存。请注意,这必须在页面构造函数或XAML中设置。这将提高内存使用率,但会在您导航回缓存页面时提高应用程序的性能

this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
更多信息请点击此处:

选项2

在页面导航之间手动保存控件状态。下面的示例使用默认情况下添加到新Windows应用商店项目中的NavigationHelper类

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]);
        }
    }
}
private void OnNavigationHelperSaveState(obj发送方,SaveStateEventArgs e)
{
e、 PageState[“SelectedSection”]=this.MainHub.SectionsInView;
}
私有void OnNavigationHelperLoadState(obj发送方,LoadStateEventArgs e)
{
如果(例如PageState!=null)
{
var sections=e.PageState[“SelectedSection”]作为IList;
if(sections!=null&§ions.Any())
{
此.MainHub.ScrollToSection(第[0]节);
}
}
}

此处的详细信息:

初始化时在页面上启用缓存模式

        public MainHubPage()
        {
      .     .......
            this.NavigationCacheMode = NavigationCacheMode.Enabled;
            .......
        }

您需要将加载的方法添加到页面构造函数中

MainHub.Loaded += async (s, e) => await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        {
            //here you can scroll
            MainHub.ScrollToSection(Loyaltysection);
        });

您好,使用默认的Hub通用应用程序模板,我在OnNavigationHelperLoadState中添加了ScrollToSection。这不起作用-当我添加一个计时器并调用ScrollToSection时,它就起作用了。所以我想在LoadState之后会有一些神奇的事情发生,它会将Hub滚动到开始。因为这样的计时器不是最好的解决方案-有任何问题吗不知道在哪里(如何)正确调用卷轴?检查[此]()答案中提到的原因并更新您的答案