如何在Windows Phone 7中弹出/完成视图

4

我是新手,在 WP7 的 Silverlight 开发栈中,有一个需求,即在加载另一个视图时需要清除当前视图。

//some good stuff happens so I need to load the next activity/view
NavigationService.Navigate(new Uri("/Checkout.xaml", UriKind.Relative));

但是在这个导航之前或之后,我需要弹出/完成当前活动。

在 Android 中,我会调用 finish;在 Objective-C 中,我只需从堆栈中弹出此视图控制器... 但在 WP7 中,我不知道如何移除此活动。

提前感谢您。

2个回答

4
您可以在 Page.OnNavigatedFrom 处理程序中完成您正在进行的任何操作,如果确实需要的话。但是我认为您应该解释一下想要结束的逻辑类型。其他线程中的异步操作需要取消令牌才能被取消,而 UI 渲染操作将在更改视图时自动结束。

请记住,WP7使用返回按钮,因此保留导航状态。这意味着用户希望能够按返回键返回到上一个视图,并且在离开时它看起来与之前完全相同。

--

正常情况下的流程如下:

App.xaml

  - MainPage.xaml (Your initial view)

     IF (UserIsLoggedIn)
        - Display Content
     ELSE
        - NavigateService.Navigate(new Uri("/Login.xaml"))

   - Login.xaml

     IF (LoginComplected)
         NavigateService.GoBack()
     ELSE
         DisplayError

1
同意-但我需要这种行为,因为我将删除登录活动,如果用户点击返回,他们可能会再次登录,给我带来麻烦 :) - Toran Billups
在这种情况下,我该如何杀死堆栈中的前一个活动? - Toran Billups
你不能“杀死”一个视图。你在这里处理登录的方法是错误的。正确的解决方案是,如果需要登录,则导航到登录视图,并在完成登录后使用NavigationService.GoBack(),以便用户返回应用程序的主视图。这样,视图将从导航状态中删除。此外,WP7dev不称之为“activity”。这是仅适用于Android的名称(而且是糟糕的!)。改称为视图或页面,每个人都会理解你的意思;-) - Claus Jørgensen
明白了 - 我可以适应你提到的风格。谢谢帮助! - Toran Billups

2

为了让用户不感到困惑,我采用了这种方法。

采用WP7的方式,我添加了一个简单的MessageBox,以便在返回之前通知用户登录是有效的,这样他们就知道登录是合法的 :)

var result = MessageBox.Show("","Login Successful!", MessageBoxButton.OK);

            if (result == MessageBoxResult.OK)
            {
                NavigationService.GoBack();  
            }

虽然这是一个不错的解决方案,但我还没有看到其他应用程序像这样行为的。大多数应用程序在完成后只会离开登录屏幕。从移动UX的角度来看,用户期望事情能够正常工作,并且只有在出现问题时才被告知。因此,对一些用户来说,这似乎是一个无意义的烦恼;-) - Claus Jørgensen

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