使用Xamarin.Forms实现自定义导航

6
我正在为Android和iOS开发一个应用程序,其中一两个视图需要一定的灵活性。因此,我们创建并实现了一个服务,将基本列表对象转换为iOS和Android用户界面。但是,现在Xamarin.Forms已经发布,我们决定用Xamarin提供的替代我们的服务。我成功地使用Xamarin.Forms创建了视图,结果页面看起来更好,运行更流畅。但我的问题在于如何进行导航。以下是我想要实现的简图:
我希望我的应用程序启动一个包含自定义片段的活动。点击此片段上的按钮后,我希望使用Xamarin.Forms API创建的页面添加到当前导航堆栈中!一旦用户完成Xamarin.Forms页面,它会导航到第二个自定义片段,所有这些操作都不会打破导航周期。有没有人知道我如何实现这一点?
对于iOS开发人员:将Activity替换为NavigationController,将Fragment替换为ViewController
2个回答

2
请看Xamarin.Forms的CarouselPage,这是Xamarin.Forms自己的方法。虽然它看起来不是你需要的,但你可以查看其源代码,也许可以自己制作自定义渲染器。
你也可以看看MVVM
至于更简单/更巧妙的方法,你可以在每个页面上放置一个按钮,当点击该按钮时,执行Navigation.PushModalAsync(nextPage) - 将不再有“<返回”按钮,如果需要,你可能需要自己实现它。

感谢您抽出时间回答。实际上,我已经有了iOS的解决方案,因为在iOS中初始化页面的方式会返回一个UIViewModel,我可以将其添加到我的导航控制器中。(App.GetMainPage().CreateViewController();)我想知道在Android中是否有类似的东西,可以返回一个Fragment/Activity,以便我开始使用它。 - Chris
@Chris 在跨平台解决方案存在的情况下,为什么要制定特定于某个平台的解决方案?我无法理解这种逻辑。 - Sten Petrov
因为使用MvvMCross仍然需要手动设计用户界面并手动连接绑定,而Xamarin.Form则不需要。我们仍然希望能够为每个平台单独设计复杂的用户界面,但是其中一个或两个视图需要一定的灵活性,这应该由两个平台共享(因此,如果页面有任何更改,我可以同时轻松地为两个平台进行更改)。我们的大部分数据都被很好地分离了,所以我不认为失去几周时间来重写mvvmcross(也缺乏文档)会有什么好处。 - Chris
@Chris,你可以使用PushModalAsync来实现相同的效果——这是一种更简单、跨平台的方法...但是好吧... - Sten Petrov

2
如果你所说的“当前导航栈”是指使用每个平台的本地导航,则请记住,您不必使用Xamarin.Forms的导航模型和PushAsync等函数。
如果您更喜欢使用特定于每个平台的代码进行导航,则可以像平常一样操作。只需在每个平台特定的项目中创建您的存根页面,并从共享项目设置每个页面的Xamarin.Forms内容。
从每个平台特定的存根页面(Activity / UIView / PhoneApplicationPage)中,您可以执行Action<>调用,在共享的Xamarin.Forms页面上设置以帮助导航,或者,连接到从Xamarin.Forms页面返回到平台特定的存根页面引发的自定义事件,以允许您从那里进行导航。
正如Sten提到的那样,不会有“返回”按钮,因此您很可能需要自己处理。

谢谢,我会尝试一下并告诉你结果的 :) - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接