1

我可以在应用程序被捕捉时使用ContactPicker合约吗?

var picker = new Windows.ApplicationModel.Contacts.ContactPicker();
picker.CommitButtonText = "Select";
picker.SelectionMode = Windows.ApplicationModel.Contacts.ContactSelectionMode.Fields;
picker.DesiredFields.Add(Windows.ApplicationModel.Contacts.KnownContactField.Email);
var contactInformation = await picker.PickSingleContactAsync();

上面的代码在全屏时有效,但在捕捉到屏幕一侧时在调用 PickSingleContactAsync() 时会引发以下异常:

System.Runtime.InteropServices.COMException 未被用户代码处理

H结果=-2147467259

Message=Error HRESULT E_FAIL 已从对 COM 组件的调用中返回。

源=mscorlib

错误代码=-2147467259

StackTrace:在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 在 TouchToneDtmf.MainPage.d__e .MoveNext() 在 d:\Users\Foo\MainPage.xaml.cs:line 556 InnerException:

4

1 回答 1

4

当应用程序被捕捉时它不起作用 - 您应该在调用 ContactPicker 之前检查应用程序的视觉状态。

在官方 C# 示例中,还有一个方法 EnsureUnsnapped(),您可能会发现在实施此合同时会有所帮助。

每次调用文件[/contact] 选择器时,您必须首先确保您的应用程序可以显示文件[/contact] 选择器,方法是验证您的应用程序没有被捕捉,或者,如果您的应用程序被捕捉,它可以被取消捕捉为了显示文件选择器。Source - 如何通过文件选择器保存文件

using Windows.UI.ViewManagement;
//...
internal bool EnsureUnsnapped()
{
    bool unsnapped = ((ApplicationView.Value != ApplicationViewState.Snapped) || ApplicationView.TryUnsnap());
    return unsnapped;
}
于 2012-09-12T09:32:45.530 回答