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

j.t*_*.h. 2 dialog prism xamarin xamarin.forms

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

Prism Dialogs 与 Prism.Plugin.Popups 有何限制?

您会使用其中一种而不是另一种的例子有哪些?

谢谢你!

Dan*_* S. 5

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 时,PopupPage 将被关闭。
  • 对话框不是 Prism 导航服务跟踪的导航堆栈的一部分。Xamarin.Forms 中的导航取决于从特定页面导航。由于 Prism 的 NavigationService 不知道该对话框,因此您需要在导航之前关闭该对话框。

其他主要差异

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