我有一个“内部导航”页面。这意味着我在该页面上显示了一些列表,当用户选择一个项目时,我(下载一些数据)重新填充该列表。
我创建了自己的历史堆栈,所以当用户想要返回时,我会从历史堆栈重新填充列表。用户可以通过轻弹或单击hw后退按钮返回。
轻弹工作正常,但后退按钮很奇怪 我取消了后退按钮事件,而是运行我的后退导航历史记录。所以我仍然在同一页上。但是后退按钮单击会隐藏应用程序栏(即使我取消该事件)。当我再次单击它并进行调试时,ApplicationBar属性为null。
// this overriden method causes ApplicationBar being hidden (or destroyed)
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
Messenger.Default.Send(...some notification here...); // this runs the internal navigation
ApplicationBar.IsVisible = true; // this doesn't help and on the second try, it throws NullReferenceException
}
// this method is ok, repopulating is working without any problem
private void GestureListener_Flick(object sender, FlickGestureEventArgs e)
{
Messenger.Default.Send( ...some notification here... ); // this run exactly same internal navigation
}
所以问题是 - 如何让ApplicationBar不被破坏/隐藏?什么是后退按钮,当我取消导航时(它必须对AppBar做一些事情)?
答案 0 :(得分:1)
好的,只有当我使用BindableApplicationBar及其Extensions(来自maxpaulousky.com)时才会发生这种情况。 这是因为Extensions处理页面本身的后退按钮事件。
解决方法是检查Cancel属性,并在它为false时将其销毁(在Extensions中的BindableApplicationBar类中)。