问题描述
实际上没有可用的 API 允许用户简单地单击我的应用程序中的按钮并显示一个对话框,允许他们选择文件。我在这里遗漏了什么吗?
解决方法
同样,唯一的答案是你太早起鸟了。
文件选择器是一个大问题,因为它高度介入沙盒模型。它与应用程序激活(从命令行启动、开始菜单、单击 url、服务等)和非沙盒/非 MSIX 打包一起在 1.0 版本的路线图上。
,有一个名为 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();