Xaml Win 8.1地铁枢纽导航
在具有子项页面的中心视图应用程序中,我的问题是,当我导航到子项详细信息页面,然后使用命令navigate goback时,视图始终返回到pageroot中心section01 如何将MainHub页面返回到最初转到子页面的原始调用部分 我的研究没有结果。我不认为快照是我的答案,但是任何建议都是非常感谢的 如果这是一个非常简单的问题,我很抱歉,但是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,并在用户导航回页面时通过将值
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滚动到开始。因为这样的计时器不是最好的解决方案-有任何问题吗不知道在哪里(如何)正确调用卷轴?检查[此]()答案中提到的原因并更新您的答案