你看看是哪个报NullReferenceException?是B页面还是A页面,这种问题应该比较好定位,自己看调试信息!看看这个this.NavigationService报错的时候鼠标移动到这个对象上,看看是不是null了!·

解决方案 »

  1.   


    是B页面报NullReferenceException,值是变成null了。
    但是我不清楚为什么第一次执行这段代码是ok的,点击b页面的取消按钮后再执行这段代码就会报错。
      

  2.   

    谢谢提示,我发现当第二次执行这段代码的时候,this.NavigationService变成了null。
    如果我加个判断
    if(this.NavigationService == null)
    {
    //...
    }
    我想要这这里加入代码使this.NavigationService变成非空,该怎么写呢?
      

  3.   

    奶奶的这种人真得骂他!哈哈
    大家可以参考一下下边的网址:
    http://www.cnblogs.com/tianyutingxy/archive/2011/09/13/2174587.html
    内容是:wp7 my tips 1--万恶的导航
    private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)
    {
       // Set the root visual to allow the application to render
       if (RootVisual != RootFrame)
           //RootVisual = RootFrame;
           RootVisual = new MainPage();
        // Remove this handler since it is no longer needed
        RootFrame.Navigated -= CompleteInitializePhoneApplication;
    }  private void Button_Click(object sender, RoutedEventArgs e)
    {
         方法1:this.NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative));
         方法2:(Application.Current as App).RootFrame.Navigate(new Uri("/Page1.xaml", UriKind.Relative));
    }
      使用第一种方法发生了NullReferenceException错误,NavigationService是空的。原因:  Page的NavigationService属性是通过依赖属性获得的。其实这里我要了解依赖属性的特点,虽然是一个static字段来维护,但是内部是有Hash表来存放不同对象的属性值。我们在构造函数的Load方法中,加载了配置文件中指定的MainPage,并生成了他的实例,然后设置了NavigationServiceProperty。而这里我们使用,MainPage的是一个新的实例,他的NavigationServiceProperty为Null。所以这里当然会报错了。 而且NavigationServiceProperty是internal属性,说以我们不能手动设置了。--摘抄  从这个异常我们能发现,每次导航的新的页面,在加载完成Page之后,都会设置Page的NavigationServiceProperty的属性。所以并不是创建了Frame,我们就能使用NavigationService来导航。而是需要Frame来吧Page和NavigationService关联起来。而这里,我们new的Mainpage没有通过Frame加载显示的,所以无法导航。--摘抄  使用第二中方法可以导航,但是不显示内容,连续点击两次回退按钮才能推出程序,说明是导航了的。原因:  很简单了,因为Page要通过RootVisual来显示,导航的话Page需要Frame来加载的,当我们把Frame设置到RootVisual时,就能显示,而这里我们设置的MainPage,虽然Frame导航了,但没有被显示出来。但是RootVisual只能设置一次,所以这里没有办法让他显示出来了。--摘抄
      

  4.   

    我的做法是把 导航事件放到 MainPage页的loaded事件里执行的
      

  5.   

    我原来用 
                    this.NavigationService.Navigate(new WordListPageView());
    会发生上面的异常。
    后来修改成
                    if (this.NavigationService!=null)
                    {
                        this.NavigationService.Navigate(new WordListPageView());
                    }
    导航正常了。
    这只是我程序中的,不一定能适应所有人的异常情况。
    分享出来,欢迎拍砖。