Llo*_*oyd 7 c# xamarin.forms uwp
项目和问题解释
在我的情况下,我有一个页面,指示用户如何移动某台机器.此页面应该是模态页面,因为在不执行或完全取消操作的情况下不应导航页面.
我有一个带有列表视图的主页,通过点击onSelect方法打开列表视图中包含的任何项目的详细信息页面:
Navigation.PushAsync(new FooPage(string Name)); /* gets called in the
onSelect method if selection is not null*/
Run Code Online (Sandbox Code Playgroud)
在将名称传递给详细信息页面的viewmodel之后,在模型中检索该模型,然后使用注入到viewmodel中的模型管理器来检索它.
- 我们现在都在堆栈上有一个主页和详细信息页面,其中只有详细信息页面有一个后退按钮 -
在详细信息页面上,我们有一个名为"Teach"的按钮,在单击它之后旁边有ax,y,z字段,此方法被调用:
private async Task Button_Clicked(object sender, EventArgs e)
{
await Navigation.PushModalAsync(new ManualTeachPage());
}
Run Code Online (Sandbox Code Playgroud)
调试和研究
此行为在Android上不可见,此页面上没有可见的后退按钮或导航栏,但在详细信息页面上也有后退按钮.
我之前使用过模态页面,但我从未见过这种行为,我尝试过使用Application.Mainpage本身的Navigation属性,除了一个案例外,结果完全相同.
我认为这可能与我在某一点切换Application.Mainpage有关(用户必须经过一堆教程页面),似乎在设置新主页之后调用pushModalAsync一行然后它就行了将页面作为模态页面推送并执行一个(没有后退按钮)但在此之后不执行此操作.
就我所见,没有关于Bugzilla的错误报告,我没有在互联网上找到关于这个特定问题的任何内容.
请注意,单击教学页面上的后退按钮时,它将返回到详细信息页面.当teachPage被推送时,它实际上被推送到ModalStack.
更新1
再次检查我所谈论的模态页面是模态堆栈上唯一的模态页面,它是.NavigationPage.SetHasBackButton(this,false); 似乎没有按照Diego Rafael Souza的建议工作.
更新2
我想我会在教学页面中使用onBackButtonPressed暂时禁用后退按钮,直到找到解决方案.事实证明这不再适用于UWP,此方法不再在此页面或任何页面上调用此方法.它虽然适用于Android硬件按钮.
更新3
我试过用:
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
AppViewBackButtonVisibility.Collapsed;
Run Code Online (Sandbox Code Playgroud)
这确实隐藏了UWP上的后退按钮但由于某种原因#if WINDOWS_UWP根本不起作用.如果我在没有#if的情况下执行此操作,程序将无法为Android构建.还没有解决方案,不仅如此,但在使用此修复程序时,其他页面仍然禁用了onBackButtonPressed方法.
更新4
在更新到最新版本的xamarin表单后,OnBackButtonPressed再次开始工作.后退按钮仍然显示在页面上,但我现在已禁用它.
重新创造问题
我在这个小测试项目中重新创建了这个问题:https: //www.dropbox.com/sh/6btsud3uvw503ee/AAAiaGb3TwhMrZMJb2j-rd36a?dl = 0
在您Button_Clicked()的示例中的函数中,在DetailPage调用Modal的页面中PushModalAsync(new TeachPage());,使用:
NavigationPage.SetHasNavigationBar(this, false);
NavigationPage.SetHasBackButton(this, false);
Run Code Online (Sandbox Code Playgroud)
我的猜测是当你尝试使用上面的内容时SetHasBackButton,你是在Modal本身上做的,但你实际看到的后退按钮来自你的DetailPage.
添加此项后,模式会弹出,后退按钮会消失.如果您在模态上设置"后退"按钮以关闭它,您可以通过OnAppearing()在DetailPage代码隐藏中添加一个函数,轻松地将您的NavBar和BackButton返回到DetailPage中:
protected override void OnAppearing()
{
base.OnAppearing(); // do the usual stuff OnAppearing does
NavigationPage.SetHasNavigationBar(this, true); //get your navbar back
NavigationPage.SetHasBackButton(this, true); //get your back button back
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
908 次 |
| 最近记录: |