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只能设置一次,所以这里没有办法让他显示出来了。--摘抄

posted @ 2011-09-13 12:18  tianyutingxy  阅读(762)  评论(0编辑  收藏  举报