如何在silverlight导航应用程序中检测后退按钮或前进按钮导航

par*_*mar 6 .net c# silverlight silverlight-5.0

当页面导航到silverlight时,您可以覆盖此方法.

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
}
Run Code Online (Sandbox Code Playgroud)

所述NavigationEventArgs具有NavigationMode其被定义为列举

public enum NavigationMode
{
    New = 0,
    Back = 1,
    Forward = 2,
    Refresh = 3,
}
Run Code Online (Sandbox Code Playgroud)

但是打电话e.NavigationMode总是抛出一个NotImplementedException

在Silverlight中是否有办法检测正在导航的页面,因为用户点击了前进/后退浏览器按钮.

我想要实现的是当用户点击后退按钮时可以保留的某种状态.

例如,假设您有一个客户页面,其中显示了数据网格中的客户列表.用户可以选择客户,并且有一个详细视图,显示该客户的所有订单.现在,在订单商品中,您可以单击超链接链接,该链接将您带到订单的发货历史记录,该订单是单独的页面.当用户点击后退按钮时,我想返回客户页面并自动选择他正在查看的客户.这有可能吗?

我还尝试了片段导航功能

NavigationService.Navigate(new Uri("#currentcustomerid=" 
       + customer.Id.ToString(), UriKind.Relative));
Run Code Online (Sandbox Code Playgroud)

当客户选择更改时,但当用户单击客户页面上的各种客户时,这会为历史记录添加太多项目.

编辑

还有一种方法可以覆盖

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
}
Run Code Online (Sandbox Code Playgroud)

这与BugFinder的答案所指示的处理NavigationService.Navigating事件相同.在此方法中,当您按下后退或前进按钮时e.NavigationMode始终返回New.此方法返回的唯一时间Back是显式调用NavigationService.GoBack()

Bug*_*der 1

public enum NavigationMode 
{ 
    New = 0, 
    Back = 1, 
    Forward = 2, 
    Refresh = 3, 
} 
Run Code Online (Sandbox Code Playgroud)

适用于导航事件..

如果我做

_ns.Navigating += ns_Navigating;
        void ns_Navigating(object sender, NavigatingCancelEventArgs e)
        {

            if (SecurityCheck(e.Uri.OriginalString)) return;
            e.Cancel = true;
            ShowError("You are not authorised to view this page");
        }
Run Code Online (Sandbox Code Playgroud)

我可以看到 e.NavigationMode 已设置。你可以在那里做测试吗?