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

时间:2011-05-14 16:35:02

标签: c# silverlight windows-phone-7

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)'

需要对象引用

为什么?

2 个答案:

答案 0 :(得分:39)

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

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

或者您只需从应用程序主机访问NavigationService,如下所示:

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

答案 1 :(得分:6)

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

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

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