6

在 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)
{
}

这与处理 NavigationService.Navigating 事件相同,如 BugFinder 的回答所示。当您点击后退或前进按钮时,此方法e.NavigationMode总是返回。New此方法唯一返回的时间Back是您显式调用NavigationService.GoBack()

4

4 回答 4

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 已设置。你可以在那里做你的测试吗?

于 2012-09-04T15:05:46.000 回答
1

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

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

我所做的是将silverlight导航框架和prism导航网格在一起,所以你需要unity和prism和mvvm友好。

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

1) 实现 IsNavigationTarget 并返回 true --> 这将在返回时保持相同的实例,因此保持选择/选定的项目。

2) 访问 onnavigatedto 的日志以跟踪您来自哪里,例如 /item/1 是前一个堆栈,因此您知道从项目 1 按下了后退按钮。

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

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

于 2012-09-05T03:33:37.390 回答
1

在用户控件中设置一个变量,该变量包含指示哪些客户处于活动状态的内容框。

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

于 2012-09-09T23:05:39.927 回答
0

这可能是您正在寻找的:

http://jakkaj.wordpress.com/2008/09/08/control-silverlight-by-using-browser-back-and-foward-buttons/

于 2012-09-04T16:46:56.027 回答