棱镜对话框与弹出窗口之间的区别

Difference between Prism Dialogs vs Popup

我正在新的 Xamarin Forms 应用程序中实施 Prism。在转换为 Prism 之前,我一直在应用程序中使用 Rg.Plugins.Popup。

Prism 对话框与 Prism.Plugin.Popups 相比有哪些限制?

有哪些使用其中一种的例子?

谢谢!

Rg.Plugins.Popup 是 Xamarin.Forms 的一个流行插件,它访问本机功能以提供传统上 Xamarin.Forms 无法实现的“模态弹出窗口”。

Prism 7.2 中的对话框

如果您使用的是 Prism 7.2,您会发现 DialogService 会定位当前显示的页面,然后“重新设置内容的父级”。或者换句话说,它获取活动内容页面的内容并将其作为 AbsoluteLayout 的根子级放置,放置一个遮罩层,最后放置您的对话框。作为这种方法的结果,您会注意到 NavigationPage 或 TabbedPage 上的任何导航栏,或者 MasterDetailPage 的菜单仍然可供用户访问。

虽然在某些方面,PopupPage 和 Dialog 可能看起来非常相似,因为您可能会发现那里存在一些重大差异。

Prism 8 中的对话框

如果您使用的是 Prism 8.0,您会看到我们已经更新到最新的 Xamarin.Forms,因此我们能够利用 Xamarin.Forms 中的一项新功能,它允许你展示一个透明背景的模态页面。这实际上允许您复制 PopupPage 的效果,根据您的看法有一些优点或缺点。

  1. 使用 Rg.Plugins.Popups,您可以将 PopupPage 推送到应用程序中当前显示的任何页面的顶部
  2. Xamarin.Forms 以模态方式推送的页面是您活动导航堆栈的一部分
  3. 使用具有透明背景和模态导航的传统页面,您实际上已经复制了使用 PopupPage 获得的外观

限制

  • Prism.Plugin.Popups 具有集成到导航服务中的优势。因此,您可以将导航服务注入 PopupPage 的 ViewModel,当您离开它导航到另一个非 PopupPage 时,PopupPage 将被关闭。
  • 对话框不是 Prism 导航服务跟踪的导航堆栈的一部分。 Xamarin.Forms 中的导航取决于从特定页面导航。由于 Prism 的 NavigationService 不知道该对话框,您需要在导航前关闭该对话框。

其他主要区别

除了我到目前为止提到的内容之外,唯一真正的区别是 Rg.Plugins.Popup 为您提供了一些添加的动画,老实说,我看到很少有人使用这些动画。