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

时间:2012-08-31 15:27:42

标签: c# .net silverlight silverlight-5.0

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

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
}

NavigationEventArgs有一个NavigationMode枚举,定义为

public enum NavigationMode
{
    New = 0,
    Back = 1,
    Forward = 2,
    Refresh = 3,
}

但是,调用e.NavigationMode始终会抛出NotImplementedException

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

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

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

我还尝试了片段导航功能

NavigationService.Navigate(new Uri("#currentcustomerid=" 
       + customer.Id.ToString(), UriKind.Relative));

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

修改

还有一种方法可以覆盖

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
}

与BugFinder的答案所指示的处理NavigationService.Navigating事件相同。在此方法中,当您点击后退或前进按钮时,e.NavigationMode始终返回New。当您明确调用Back

时,此方法返回NavigationService.GoBack()的唯一时间

4 个答案:

答案 0 :(得分:1)

public enum NavigationMode 
{ 
    New = 0, 
    Back = 1, 
    Forward = 2, 
    Refresh = 3, 
} 

适用于导​​航事件..

如果我这样做

_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");
        }

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

答案 1 :(得分:1)

据我所知,我认为没有任何简单的方法可以开箱即用。

您尝试实现的目标可以使用我创建的框架轻松完成 http://ultimateframework.codeplex.com

我所做的是将银色导航框架和棱镜导航结合在一起,因此您需要团结和棱镜以及友好的mvvm。

您想要实现的目标可以通过以下方式使用框架来完成

1)实施IsNavigationTarget并返回true - >因此,在导航回来时将保持相同的实例,从而保持选择/选择的项目。

2)访问onnavigatedto的日志以跟踪你来自哪里,说/ item / 1是前一个堆栈,所以你知道从第1项开始按下后退按钮。

3)您甚至可以在为实现相同结果而提供的自定义控件中实现自己的后退/前进/刷新(不在codeplex中)

我实际上将它用于工作中的生产代码,我创建了它,所以请随意尝试。请注意,那里的版本有错误,我还没有时间发布我们的最新版本,但是如果你需要它,我会为你更新:),就在我下面。

答案 2 :(得分:1)

在usercontrol中设置一个变量,其中包含指示客户处于活动状态的内容框架。

在usercontrol中为contentframe的Navigated事件添加处理程序。使用此选项检查指示客户处于活动状态的变量(如果变量不为空),并选择客户。

答案 3 :(得分:0)