WP7中的墓碑

时间:2012-06-22 12:30:27

标签: c# silverlight windows-phone-7 tombstoning

我想在我的WP7应用程序中实现tomb-stoning,这个应用程序不是基于MVVM模式。任何人都可以参考我的任何一个好的例子来实现它。所以我可以使用一些通用类维护我的应用程序的状态。

1 个答案:

答案 0 :(得分:2)

以下是一些很好解释它的链接:

这个很好地解释了你必须管理的不同状态,包括暂停和逻辑删除之间的区别。 http://lnluis.wordpress.com/2011/09/25/fast-application-switching-in-windows-phone/

Shawn Wildermuth非常好,并在此视频中向您展示如何实施。 http://vimeo.com/14311977

这是一篇博文,详细解释 http://xna-uk.net/blogs/darkgenesis/archive/2010/11/08/there-and-back-again-a-tombstoning-tale-the-return-of-the-application.aspx

这个来自Windows Phone开发者博客: http://windowsteamblog.com/windows_phone/b/wpdev/archive/2010/07/15/understanding-the-windows-phone-application-execution-model-tombstoning-launcher-and-choosers-and-few-more-things-that-are-on-the-way-part-1.aspx

基本上,当您想要使用逻辑删除时,您需要使用Application_Deactivated事件将变量存储在独立存储中,并使用Application_Activated事件来检索它们。随着Mango(去年秋天)的出现,您应该在Application_Activated中进行测试,以查看该应用是否来自暂停状态。

if (!e.IsApplicationInstancePreserved)
  {
    //do stuff to restore from tombstoned
  }

编辑添加另一个例子: 也许这个额外的简单例子可以帮到你。 http://dotnet-redzone.blogspot.com/2010/09/windows-phone-7-scrollbar-position.html

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)   
{   
    base.OnNavigatedFrom(e);   
    // Remember scroll offset   
    try   
        {   
            ScrollViewer viewer = ((VisualTreeHelper.GetChild(listBox, 0) as FrameworkElement).FindName("ScrollViewer") as ScrollViewer);   
            State["scrollOffset"] = viewer.VerticalOffset;  
        }  
    catch { }  
}  

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)  
{  
    base.OnNavigatedTo(e);  
    object offset;  
    // Return scroll offset  
    if (State.TryGetValue("scrollOffset", out offset))  
        listBox.Loaded += delegate  
        {
            try  
            {  
                ScrollViewer viewer = ((VisualTreeHelper.GetChild(listBox, 0) as FrameworkElement).FindName("ScrollViewer") as ScrollViewer);  
                viewer.ScrollToVerticalOffset((double)offset);  
            }  
            catch { }  
        };  
}