首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从FilePicker / MessageDialog启动UICommand或MessageDialog

从FilePicker / MessageDialog启动UICommand或MessageDialog
EN

Stack Overflow用户
提问于 2015-07-23 16:29:38
回答 1查看 119关注 0票数 1

当我的Windows应用程序启动时,我希望提示用户使用FolderPicker选择一个本地存储文件夹,并将其保存在FutureAccessList中。我使用的提示符是MessageDialog

代码语言:javascript
复制
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    var messageDialog = new MessageDialog("Please pick a folder where you'd like to store your documents", "Choose storage");
    messageDialog.Commands.Clear();
    messageDialog.Commands.Add(new UICommand("OK", async (command) =>
    {
        await PickFolder();
    });
    await messageDialog.ShowAsync();
}

private async Task PickFolder()
{
    FolderPicker folderPicker = new FolderPicker();
    folderPicker.SuggestedStartLocation = PickerLocationId.Desktop;
    folderPicker.FileTypeFilter.Add(".txt");
    folder = await folderPicker.PickSingleFolderAsync();
    // lets just ignore cancellations for now
    StorageApplicationPermissions.FutureAccessList.AddOrReplace("MyFolder", folder);
}

这段代码不起作用-我得到一个访问被拒绝的错误

代码语言:javascript
复制
Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

我认为使用messageDialog.ShowAsync()就足以解决这个问题,但它似乎不起作用。有什么想法吗?

我必须放弃漂亮的WinRT messageDialogs,转而选择本土的东西吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-24 00:56:19

MessageDialog的命令在关闭之前触发,在第一个模式对话框仍未打开时,您无法打开第二个模态对话框。

您需要将对PickFolder的调用推迟到MessageDialog完成之后。因为您正在等待它,所以您可以在ShowAsync之后调用它。这是没有意义的,因为ok是唯一的选项,但是您可以打开选择在多个选项之间选择的命令。

代码语言:javascript
复制
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    var messageDialog = new MessageDialog("Please pick a folder where you'd like to store your documents", "Choose storage");
    messageDialog.Commands.Clear();
    UICommand okCommand = new UICommand("Ok");
    messageDialog.Commands.Add(okCommand);
    var cmd = await messageDialog.ShowAsync();
    if (cmd == okCommand)
    {
        await PickFolder();
    }
}

另一种选择是在调用PickFolder之前在UICommand处理程序中添加一个延迟(例如,通过在Dispatcher.RunAsync块中调用PickFolder ),以便MessageDialog能够关闭。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31593106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档