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

Wil*_*sch 12 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

}
Run Code Online (Sandbox Code Playgroud)

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

为什么?

key*_*rdP 39

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

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

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

(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(targetUri);
Run Code Online (Sandbox Code Playgroud)


gla*_*asa 6

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

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

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