如何构建我的代码以在WinRT应用程序中运行XAML页面"返回"结果呢?

时间:2014-04-18 22:22:35

标签: windows-phone-8 windows-runtime windows-phone winrt-xaml windows-phone-8.1

我目前正在为Windows 8.1和Windows Phone 8.1构建通用应用。

在Windows运行时,文件选择器有一个非常容易使用的API,如下所示:

StorageFile file = await openPicker.PickSingleFileAsync();

它将用户输入视为可以等待的异步操作。在这种情况下,如果用户取消,则返回null,但是如果用户取消,您可以想象会抛出异常。

我想知道是否有某种方法可以创建一个页面,以便我可以创建一个类似的API。具体来说,我正在使用托管服务进行OAuth 2.0身份验证,我想将用户发送到WebView中托管的身份验证页面,如果操作成功则返回请求访问令牌的代码,如果用户没有,则返回异常授权我的申请。

例如:

var authentication = new AuthenticationAccess();

string code = await authentication.RequestAuthorizationAsync();

调用将使用包含WebView的页面交换框架中的页面,用户将能够进行身份验证,然后控制将返回到调用函数并且页面交换回原始页面

我在Windows 8.1 C#/ XAML文档中游泳。根据我的理解,有一个全局Window对象,它承载一个Frame对象,该对象可以将其内容与应用程序中的不同Pages交换出来。完成了一些Android开发后,我熟悉了Activity模型,其中可以通过意图启动本质上不同的页面,并可以将结果传播回启动它的Activity。使用这个模型,似乎很容易将这个过程包装在我描述的模型中,但是我对如何在Windows中做同样的事情感到有些困惑。我是否需要站出重要的架构来实现这种模式?

对此有一个简单的答案,还是我在脑海中?

1 个答案:

答案 0 :(得分:1)

你检查过WebAuthenticationBroker了吗?也许这可能会成为解决问题的简单方法。

否则 - 您可以使用TaskCompletionSource设置您可以等待的身份验证任务,但我会尝试避免导航到您的身份验证对话框的其他页面,因为导航事件可能会弄乱您的状态和打破任何人等待身份验证完成。某种对话覆盖可能是一个更好的主意。