【WinUI 3】排除正常使用文件对话框时的错误

问题背景

一些应用场景中,我们常常需要调用文件对话框操作本地文件,如打开、保存、选择等。通常采用的是Windows.Storage.Pickers而WinUI 3 Desktop中直接声明Picker、调用ShowAsync()则会抛出意外的错误。

这说明,WinUI 3 Desktop不能直接调用Windows.Storage.Pickers下的文件对话框。

问题分析

通过在网上查询,发现WindowsAppSDK仓库下已经有相关Issue解决这个问题。

In desktop-based apps (like WinUI 3 desktop or WPF MSIX), The FileOpenPicker, FileSavePicker, and FolderPicker APIs require a HWND associated with them, so that they know which window to display over.

根据相关描述,这是Desktop与UWP平台差异导致的,在使用文件对话框前需要手动获取窗口句柄用来将picker初始化。故,添加如下代码即可(以FilePicker举例,其它Pickers亦是如此):

// var picker = new FileOpenPicker();

// 传入MainWindow实例,获取窗口句柄。
var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(this);

// 将句柄用于初始化Picker。
WinRT.Interop.InitializeWithWindow.Initialize(picker, hwnd);

// 正常使用Picker。
// var file = await picker.PickSingleFileAsync();

总结&收获

开源项目在Github Issues中多半都能找到报告和解决方案,如果没有,撰写Issue会是不错的选择。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值