1

如何确定何时按下导航窗口后退按钮并将该事件捕获到额外的东西。我正在考虑管理页面状态。

4

2 回答 2

4

将处理程序添加到NavigationWindow.NavigatingNavigationService.Navigating。在您的处理程序中:

void NavigationService_Navigating(object sender, NavigatingCancelEventArgs e)
{
    if (e.NavigationMode == NavigationMode.Back) {
        e.Cancel = true;

        // TODO: whatever state management you're going to do
    }
}

Ps 您需要注册导航服务。在我的代码中,它不适用于页面构造函数,因为导航服务仍然为空。因此,我将 Loaded="page_Loaded" 添加到 XAML 页面标记并将其分配在那里:

bool _navigationServiceAssigned = false;
private void page_Loaded(object sender, RoutedEventArgs e)
{
    if (_navigationServiceAssigned == false)
    {
        NavigationService.Navigating += NavigationService_Navigating;
        _navigationServiceAssigned = true;
    }
}

NavigatingCancelEventArgs包含有关管理页面状态所需的导航请求的所有信息。

于 2012-07-25T16:41:03.083 回答
1

NavigationService如果您想控制导航过程,提供了许多您可以订阅的事件:

  • 导航,当框架即将导航时。将 Cancel 设置为 true 以停止。
  • 导航,当导航完成但在呈现之前
  • NavigationFailed,当出现问题时
  • NavigationProgress,当正在下载远程导航调用的块时。
  • NavigationStopped,当调用 StopLoading 方法或在下载过程中发出新的 Navigate 请求时
  • LoadCompleted,当页面被渲染时
于 2012-07-25T16:36:26.337 回答