gpt4 book ai didi

c# - 在 Windows Phone 8 中实现类似 Tab 的导航模型——怎么做?

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:13 25 4
gpt4 key购买 nike

我目前正在尝试实现一种与 Windows Phone 8 上的 Internet Explorer 应用程序非常相似的导航方案。

IE 应用程序可以有多个选项卡,用户可以在这些选项卡之间切换。这些选项卡中的每一个都有自己的历史记录。点击手机上的后退按钮会将您带到该选项卡导航历史记录中的上一页(不是 PhoneApplicationFrame.BackStack )。如果没有之前的页面,后退按钮会将您带到之前打开的选项卡,如果没有,则退出应用。

为什么这让我烦恼

  • Application.RootVisual只能设置一次。所以你不能有两个 PhoneApplicationFrames,每个都有自己的 BackStack,来交换 RootVisual两者之间。

  • 您不能遍历 BackStack(毕竟它是一个 Stack)。只能调用GoBack() .打电话GoForward()将抛出异常。

  • PhoneApplicationFrame.GoBack()从 BackStack 中删除只能通过 PhoneApplicationFrame.Navigate(...) 再次添加的条目方法。因此,操纵 BackStack 是不行的。

好主意

  • 保留 Dictionary<enum, List<string>>每次调用自定义 NavigationService.Navigate(tabTypeEnum, uriString, params) 时都会更新.这将保留每个 tabType 的导航历史记录,使我们能够在 BackKeyPress 时浏览当前选项卡的历史记录。事件被处理。 坏事是,调用Navigate(...)转到以前的页面(而不是 GoBack )将添加到 BackStack。所以现在需要维护,这会伤害我的大脑。

  • 创建自定义 NavigationAwareTabPage : PhoneApplicationPage ,它通过在其 Content 时动画转换来跟踪自己的导航历史和 fakes 导航。被改变了。我们唯一一次调用 true Navigate是当我们从一个选项卡切换到另一个选项卡时。 (我认为这就是 IE 应用程序所做的。)和 BackKeyPress必须如下所示。

这个:

void RootFrame_BackKeyPress(object sender, CancelEventArgs e)
{
var rootFrame = sender as PhoneApplicationFrame;
if (rootFrame.CanGoBack)
{
// Get the NavigationAwarePage
var navAwarePage = rootFrame.Content as NavigationAwareTabPage;
if(navAwarePage.CanGoBack())
{
// This method "navigates" to the next page
// by changing the navAwarePage.Content
navAwarePage.GoBackToPreviousPage();
e.Cancel = true;
}
}
}

有人走过这条路吗?

最佳答案

ReactiveUI 如何覆盖后退按钮的所有魔力都在这里:

https://github.com/reactiveui/ReactiveUI/blob/master/ReactiveUI.Mobile/WP8AutoSuspendApplication.cs#L91

这在 ReactiveUI 中的工作方式是有一个名为 RoutedViewHost 的内容控件正在监听返回信号(你可以做任何你想响应硬件后退按钮并取消默认操作)。 ReactiveUI 维护其自己的基于 ViewModel 的返回堆栈并操作那个而不是使用 WP8,而且您永远不会调用 WP8 的导航方法。

这实际上意味着,从 WP8 的角度来看,整个应用程序中只有一个页面。 WP8 真的想要自己创建该页面,它在 WMAppManifest.xml 中指定。

不要试图参与WP8的Frame系统,它真的想按自己的方式工作,否则你无法说服它。

最后一件重要的事情,如果你在你的返回堆栈的底部,你必须允许默认的返回 Action 发生(即 WP8 想要做的, 把你带出应用)。否则,您可能无法通过认证,并且您做错了™。

关于c# - 在 Windows Phone 8 中实现类似 Tab 的导航模型——怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20103266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com