C# 从App.xaml.cs导航

C# 从App.xaml.cs导航,c#,windows-phone-7,C#,Windows Phone 7,我想在我的应用程序的多个页面中添加一个应用程序栏。因此,我将应用程序栏定义为一个应用程序资源,以便它可以被多个页面使用。现在,这些按钮的事件处理程序位于这里提到的App类中。 但是,这些应用程序栏按钮基本上是重要页面的快捷方式。因此,单击一个按钮只会将您带到相应的页面。但是,由于我在App.xaml.cs中定义事件处理程序,因此它不允许我导航。我明白原因。但是,我不知道如何解决这个问题 NavigationService.Navigate(new Uri("/Counting.xaml", Ur

我想在我的应用程序的多个页面中添加一个应用程序栏。因此,我将应用程序栏定义为一个应用程序资源,以便它可以被多个页面使用。现在,这些按钮的事件处理程序位于这里提到的
App
类中。 但是,这些应用程序栏按钮基本上是重要页面的快捷方式。因此,单击一个按钮只会将您带到相应的页面。但是,由于我在
App.xaml.cs
中定义事件处理程序,因此它不允许我导航。我明白原因。但是,我不知道如何解决这个问题

NavigationService.Navigate(new Uri("/Counting.xaml", UriKind.RelativeOrAbsolute));

表示“非静态字段、方法或属性System.Windows.Navigation.NavigationService.Navigate(System.Uri)需要对象引用”

如果您可以访问该框架,该引用是否有效

(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/Counting.xaml", UriKind.RelativeOrAbsolute));
编辑:
每个应用程序只有一个。正是这个框架公开了
导航服务
。因此,导航服务始终可以通过框架访问,因为在任何Windows Phone应用程序中都有它的实例。由于您通常不会实例化新的
导航服务
,因此很容易认为它是一个静态方法。然而,它实际上是一个非静态类,在应用程序运行时会自动实例化。在本例中,您所要做的就是获取全局实例,该实例附加到始终存在的框架,并使用该框架在页面之间导航。这意味着您的类不必实例化或显式继承NavigationService。

从App.xaml.cs(使用应用程序栏)导航到其他页面的另一种方法是使用rootFrame变量(在结束行):


我发现这种方法更好。根框架对象已经在App.xaml.cs文件中,您只需调用它。另外,将其放在UI线程调度程序中更安全

 Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    // change UI here
                    RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
                });

谢谢。成功了。你能解释一下吗?不客气。我已经编辑了我的帖子,希望它能解释为什么它有效。
 Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    // change UI here
                    RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
                });