NavigationService.Navigate()方法和PhoneApplicationFrame.Source属性有什么区别?

5
使用Microsoft Visual Studio 2010 Express for Windows Phone创建Windows Phone应用程序-练习1中提取
任务3:步骤9
// navigate
this.NavigationService.Navigate(new Uri("/PuzzlePage.xaml", UriKind.Relative));

注意:
PhoneApplicationPage类提供了通过其NavigationService属性导航到页面的方法和属性。您可以调用NavigationService的Navigate方法并将页面的URI作为参数传递。您还可以使用GoBack和GoForward方法向后或向前导航到导航历史记录中。硬件返回按钮还提供了应用程序内的向后导航。上面显示的事件处理程序使用NavigationService转到PuzzlePage.xaml页面。
任务4:步骤3
(RootVisual as Microsoft.Phone.Controls.PhoneApplicationFrame).Source = 
    new Uri("/ErrorPage.xaml", UriKind.Relative);

注意:
...
每当您将 Source 属性设置为与显示内容不同的值时,框架都会导航到新内容。
...

这两种技术有什么区别和相似之处?

1个回答

6
基本上,它们都是做同样的事情。 NavigationService.Navigate 是原生的Silverlight导航服务,允许从一个xaml文件异步导航到另一个(消除了加载用户控件的需要) - 这里有一个很好的概述 here
区别在于,NavigationService 有类似浏览器的向前和向后的能力。而设置 PhoneApplicationFrame.Source 属性则没有这个功能。
现在还为时过早,可能还不适合对你应该使用哪个进行教育性的猜测。 NavigationService 的优点是它是一个Silverlight本地类,然而 PhoneApplicationFrame.Source 是特定于WP的。

1
PhoneApplicationFrame.Source继承自Frame,因此不特定于Windows Phone。我现在无法测试它,但我认为即使使用Source属性,您也可以浏览页面堆栈。Navigate方法和Source属性之间的一个区别是,您不能在尚未加载页面的情况下调用Navigate,而您可以随时设置Source属性。 - Andréas Saudemont
“你不能在尚未加载的页面上调用Navigate方法”?这是不是意味着我不能导航到以前从未导航过的页面?非常令人困惑。 - Ryan Pedersen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接