我一直在玩我喜欢的 Exrin Xamarin Forms 框架。
我遇到了一个阻止程序,我想将容器作为模态推送。任何人都知道如何做到这一点的任何提示?我找不到任何示例,也找不到如何将容器作为模态推送的最佳方法。
查看 Exrin 代码,可能必须更改BaseStack.cs
、创建一种NavigationModal
ResultType
生活方式,这样它就不会影响内存容器等中的已经存在的东西......?
还有其他想法吗?
我一直在玩我喜欢的 Exrin Xamarin Forms 框架。
我遇到了一个阻止程序,我想将容器作为模态推送。任何人都知道如何做到这一点的任何提示?我找不到任何示例,也找不到如何将容器作为模态推送的最佳方法。
查看 Exrin 代码,可能必须更改BaseStack.cs
、创建一种NavigationModal
ResultType
生活方式,这样它就不会影响内存容器等中的已经存在的东西......?
还有其他想法吗?
Exrin 及其堆栈背后的想法是不需要模态。使用 Modals 的唯一原因是您不能只从现有页面上按回并位于现有页面之上的页面。
这里推荐的方法是创建一个新堆栈并导航到该堆栈。完成后返回上一个堆栈。它的行为方式与 Modal 相同,但您不需要实际使用 Modal。
更新
如果你必须有一个模态,而其他支持转换的方式开始发挥作用,你可以修改你的 NavigationProxy。替换下面的 2 个函数。
public async Task PopAsync()
{
if (_page.Navigation.ModalStack.Count > 0)
{
var page = _page.Navigation.ModalStack[0];
_page_Popped(null, new NavigationEventArgs(page));
await _page.Navigation.PopModalAsync();
}
else
await _page.PopAsync();
}
public async Task PushAsync(object page)
{
var xamarinPage = page as Page;
if (xamarinPage == null)
throw new Exception("PushAsync can not push a non Xamarin Page");
if (page is ExrinSample.View.AboutView)
await _page.Navigation.PushModalAsync(xamarinPage);
else
await _page.PushAsync(xamarinPage);
}
当然,这是手动引用代理中的特定页面。如果你想清理它,你可以在你的堆栈中添加一些方法来列出模式页面,并在需要时使用该列表推送到模式,而不是直接将页面名称放在代理中。