取消后退导航时销毁ApplicationBar

时间:2011-03-07 10:49:37

标签: windows-phone-7

我有一个“内部导航”页面。这意味着我在该页面上显示了一些列表,当用户选择一个项目时,我(下载一些数据)重新填充该列表。

我创建了自己的历史堆栈,所以当用户想要返回时,我会从历史堆栈重新填充列表。用户可以通过轻弹或单击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做一些事情)?

1 个答案:

答案 0 :(得分:1)

好的,只有当我使用BindableApplicationBar及其Extensions(来自maxpaulousky.com)时才会发生这种情况。 这是因为Extensions处理页面本身的后退按钮事件。

解决方法是检查Cancel属性,并在它为false时将其销毁(在Extensions中的BindableApplicationBar类中)。