Windows Phone - OnNavigatingFrom - 问题

4
我相信这只是我的问题,因为我缺乏编程能力。我目前正在探索Windows Phone应用程序的页面导航之间的转换。我最初使用storyboards,并完成了事件处理程序,使我的页面动画进入和退出屏幕。当您想要从一个页面导航到许多页面时,使用相同的转换会导致问题。
因此,我开始查看OnNavigatedTo和OnNavigatingFrom事件,虽然对于OnNavigatedTo来说它很好地工作,但后者就不起作用了。似乎Microsoft.Phone.Navigation程序集不包含OnNavigatingFrom,并且引用System.Windows.Navigation,可以编译,但我无法在导航时使页面动画消失。
我在Page2上有一个按钮,我希望返回到我的MainPage(在测试中,我已经覆盖了后退键并添加了消息框)。我已经为页面创建了转换,并将其作为事件处理程序代码...
private void btnP2_BackToP1Clicked(object sender, System.Windows.RoutedEventArgs e)
 {          
    NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));        
}

使用这段代码来处理OnNavigatedTo和OnNavigatingFrom事件...
protected override void OnNavigatedTo(PhoneNavigationEventArgs e)
{
    PageTransition_In.Begin();
}

// //

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
    PageTransition_Out.Begin();

    base.OnNavigatingFrom(e);
}

我有一种感觉,OnNavigatingFrom可能(尚)不支持Windows Phone应用程序。 OnNavigatedFrom是Microsoft.Phone.Navigation的一部分,但它只在页面不再处于活动状态时执行操作,这对于执行任何动画效果来说太晚了。


我感同身受!我尝试了Technium建议的过渡帧,但它根本不起作用。虽然这是最简单和(如果有效)最方便的选项,但它存在重大问题。我的做法是采用你最初的方法,并设置一个页面级属性来存储要导航到的页面。因此,在调用Navigate()之前,您可以使用目标页面设置该属性。然后,当过渡完成时,导航到该数据。这不是很好,但这是我找到的唯一可行的替代方案。 - Mac
3个回答

0

你目前采取的方法并不完全正确。相反,更好的做法是修改页面框架,让它知道如何在页面之间进行转换。你可以在Channel 9视频或者Avi Pilosof的博客上看到很好的例子。

示例:

<ControlTemplate x:Key="TransitioningFrame" TargetType="navigation:PhoneApplicationFrame">
  <Border>
    <toolkit:TransitioningContentControl
        Content="{TemplateBinding Content}" Transition="DownTransition" />
  </Border>
</ControlTemplate>

0

我相信你需要添加一个捕获转换完成事件的方法。可以查看微软提供的列表视图应用程序演示。


不幸的是,这不是问题所在。转换根本没有播放,页面只是改变了,但是当我导航到页面时,我可以看到动画。OnNavigatingFrom事件应该在页面变为非活动状态之前触发,而OnNavigatedTo事件则在页面在ApplicationFrame中处于活动状态时触发。事实上,OnNavigatingFrom是从Silverlight Page程序集继承而来的,在Microsoft.Phone中不存在,这可能表明它不受支持。即使该事件在显示Microsoft.Phone.Navigation事件的页面上列出。http://bit.ly/brBzXD - Martin Anderson
是的,看起来SDK中有一些错误。我在SOAP SSL身份验证方面遇到了一些问题。 - Mitchell Skurnik

0

我很困惑为什么我们需要为WinPhone7自己编写平滑过渡效果,但事实就是如此。Jeff Brand(SlickThought.net)似乎迄今为止提供了最好的解决方案。这里有一篇不错的文章,其中包括一个演示视频和示例代码,尽管他在文章中的示例代码是针对四月份的CTP版本,而且在Beta工具中似乎已经失效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接