WP7 – NavigationService.Navigate抱怨它没有收到对象引用。 。 。 但为什么?

WP7新问题在这里。

我有以下代码:

public class KeyboardHandler : INotifyPropertyChanged { // lots of methods here public void FunctionKeyHandler() { Uri targetUri = new Uri("/View/SelectTable.xaml",System.UriKind.Relative); NavigationService.Navigate(targetUri); } // more methods } 

我收到一个错误:
“错误1非静态字段,方法或属性’System.Windows.Navigation.NavigationService.Navigate(System.Uri)’需要对象引用

为什么?

Navigate方法实际上是非静态NavigationService类的一部分。 由于它是非静态的,因此您需要创建它的实例。 您之前不必创建实例的原因是因为它是Page对象的一部分,但由于您没有从Page对象inheritance,因此您无权访问NavigationService实例。

有很多方法可以解决这个问题,例如在你的usercontrol中创建一个事件处理程序,你的主机页面对象(例如MainPage)可以订阅它并让它代表它激活NavigationService。

或者您只需从Application主机访问NavigationService,如下所示:

 (Application.Current.RootVisual as PhoneApplicationFrame).Navigate(targetUri); 

NavigationServicePhoneApplicationPage类中的属性的名称,但它也是类的名称。

从页面调用NavigationService.Navigate()方法时,可以使用基类中的对象。 但在您的情况下,您没有具有此名称的对象,因此编译器尝试访问NavigationService类,并进行调用,就像Navigate是静态方法一样。

但它不是静态的,这就是您收到此错误的原因:您必须使用NavigationService的实例