你看看是哪个报NullReferenceException?是B页面还是A页面,这种问题应该比较好定位,自己看调试信息!看看这个this.NavigationService报错的时候鼠标移动到这个对象上,看看是不是null了!·
解决方案 »
- TreeView
- C# 8彩色 8灰度
- .net 2003的工程用2005打开时出现如下提示,如何解决呀?
- sql 参数返回问题 请帮忙 ~~
- 大哥大姐,DataGrid小问题;水晶报表;
- 求救`_完成一个复数类、提供复数的加减运算(也可以完成乘除运算),并重写ToString方法。
- 请问MessageQueue.GetPrivateQueuesByMachine该如何使用?
- OCR的问题?
- C/S中如何实现上传一个声音文件。
- System.Data.OleDb.OleDbException (0x80040E07): 标准表达式中数据类型不匹配。
- 想找个Jquery.ui.datetimepicker下载
- WinCe下SqlDataReader没有HasRow属性 如何判断是否有记录?
是B页面报NullReferenceException,值是变成null了。
但是我不清楚为什么第一次执行这段代码是ok的,点击b页面的取消按钮后再执行这段代码就会报错。
如果我加个判断
if(this.NavigationService == null)
{
//...
}
我想要这这里加入代码使this.NavigationService变成非空,该怎么写呢?
大家可以参考一下下边的网址:
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只能设置一次,所以这里没有办法让他显示出来了。--摘抄
this.NavigationService.Navigate(new WordListPageView());
会发生上面的异常。
后来修改成
if (this.NavigationService!=null)
{
this.NavigationService.Navigate(new WordListPageView());
}
导航正常了。
这只是我程序中的,不一定能适应所有人的异常情况。
分享出来,欢迎拍砖。