使用 WinUI3/Project Reunion 0.5 时,我都有哪些选择/打开文件和文件夹的选项?
Posted
技术标签:
【中文标题】使用 WinUI3/Project Reunion 0.5 时,我都有哪些选择/打开文件和文件夹的选项?【英文标题】:What are my options for selecting/opening files and folders when using WinUI3/Project Reunion 0.5?使用 WinUI3/Project Reunion 0.5 时,我有哪些选择/打开文件和文件夹的选项? 【发布时间】:2021-07-09 20:49:39 【问题描述】:实际上没有可用的 API 允许用户简单地单击我的应用程序中的一个按钮并显示一个允许他们选择文件的对话框。我在这里遗漏了什么吗?
【问题讨论】:
FileOpenPicker
【参考方案1】:
再一次,唯一的答案是你太早鸟了。
文件选择器是个大问题,因为它高度介入沙盒模型。它与应用程序激活(从命令行、开始菜单、单击 url、服务等)和非沙盒/非 MSIX 打包一起在 1.0 版本的路线图上。
【讨论】:
【参考方案2】:有一个名为 IWindowNative 的 COM 接口来获取 Window 对象的 HWND。不幸的是,C#/WinRT 投影需要一些改进(已经在预览版 2 中就地)以启用使用指定的 COM 接口。
[ComImport]
[Guid("3E68D4BD-7135-4D10-8018-9FB6D9F33FA1")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IInitializeWithWindow
void Initialize(IntPtr hwnd);
[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("EECDBF0E-BAE9-4CB6-A68E-9598E1CB57BB")]
internal interface IWindowNative
IntPtr WindowHandle get;
var filePicker = new FileOpenPicker();
//Get the Window's HWND
var hwnd = this.As<IWindowNative>().WindowHandle;
//Make folder Picker work in Win32
var initializeWithWindow = filePicker.As<IInitializeWithWindow>();
initializeWithWindow.Initialize(hwnd);
filePicker.FileTypeFilter.Add("*");
var folder = await filePicker.PickSingleFileAsync();
【讨论】:
以上是关于使用 WinUI3/Project Reunion 0.5 时,我都有哪些选择/打开文件和文件夹的选项?的主要内容,如果未能解决你的问题,请参考以下文章
The ACMer Reunion 2050 Amusement Competition 游记
英语流利说 Level5 Unit1 Part1 Jessica’s Class Reunion2
WinUI 3 - Project Reunion 0.8(和更高版本的 Windows App SDK)部署选项,如“XCOPY”(?)