C# Windows8导航中的困惑

C# Windows8导航中的困惑,c#,windows-8,navigation,microsoft-metro,C#,Windows 8,Navigation,Microsoft Metro,我对Windows8中从一个页面导航到另一个页面的两种方式感到困惑 第一个: 使用最初在App.Xaml.cs类中定义的框架,如下所示 public static Frame RootFrame; protected override void OnLaunched(LaunchActivatedEventArgs args) { RootFrame = Window.Current.Content as Frame; } 像..一样浏览它 App.RootFrame.N

我对Windows8中从一个页面导航到另一个页面的两种方式感到困惑

第一个

使用最初在App.Xaml.cs类中定义的框架,如下所示

 public static Frame RootFrame;

 protected override void OnLaunched(LaunchActivatedEventArgs args)
 {
      RootFrame = Window.Current.Content as Frame;
 }
像..一样浏览它

App.RootFrame.Navigate(typeof(Page1));
第二个: 这是一种简单的导航方式,如

this.Frame.Navigate(typeof(page1));

问题:-这两种类型有什么不同吗?如果有,请让我知道。

这是相同的方法,实际上是在同一对象上操作的。您的应用程序对象创建一个承载页面的
Frame
对象(在基本应用程序模板中,当应用程序首次启动时,请注意,如果
rootFrame
为空,它将弹出一个
Frame
,并将其设置为
Window.Current.Context

从那时起,您将使用同一
对象的导航功能。当您导航到
Page1
时,
Frame
Page1.Frame
属性设置为自身,因此在
Page1
中,
this.Frame
指向与
App.RootFrame
相同的对象(本质上是一个“父”链接)

因此,
Window.Current.Content
承载一个
Frame
对象,该对象承载
Page
s。每个
页面
都有一个指向该
框架
的指针,他们可以使用该指针命令该
框架
导航到其他
页面
s

请注意,
Window.Current.Content
本身是一个可设置的
ui元素
。这意味着它可以在技术上承载除
框架之外的UI。这可以用来(例如)制作一些chrome,它本身承载了一个
框架
,这是你的应用程序的实际内容(就像以前的HTML iFrame)。我在一个案例中这样做是为了创建一个开发人员控制台,该控制台可以从我的应用程序的每个页面轻松调用/使用(因为它存在于承载各个页面的框架级别之上)