我正在try 在Windows App SDK(WinUI3)应用程序中显示文件选取器.我正在用C#编写它.

下面是显示文件选取器的函数:

        private async Task<StorageFile> PickFileAsync()
        {
            var filePicker = new FileOpenPicker();
            filePicker.ViewMode = PickerViewMode.Thumbnail;
            filePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
            filePicker.FileTypeFilter.Add(".jpg");
            filePicker.FileTypeFilter.Add(".jpeg");
            filePicker.FileTypeFilter.Add(".png");

            var hwnd = this.XamlRoot.Content.XamlRoot.WindowId;

            WinRT.Interop.InitializeWithWindow.Initialize(filePicker, hwnd);

            StorageFile file = await filePicker.PickSingleFileAsync();
            if (file != null)
            {
                // Application now has read/write access to the picked file
                return file;
            }
            else
            {
                return null;
            }
        }

下面是我调用该函数的方式:

            StorageFile pickedFile = await PickFileAsync();

以防万一,我从定义为privateasyncvoid的另一个函数中调用该函数.

顺便说一句,我已经将PickFileAsync()方法放入了我的一个应用程序页面的.cs代码中,因为该页面包含触发操作的菜单.

很少有文章说明这一点,所以我不能真正做太多的研究.

推荐答案

如果你想在Page上打开文件选取器,这里有一个例子.

首先,让你的MainWindow可以从你的页面访问.要做到这一点,一种方法是将其设置为public static:

App.xaml.cs

using Microsoft.UI.Xaml;

namespace FilePickerExample;

public partial class App : Application
{
    public App()
    {
        this.InitializeComponent();
    }

    public static Window? Window { get; private set; }

    protected override void OnLaunched(LaunchActivatedEventArgs args)
    {
        Window = new MainWindow();
        Window.Activate();
    }
}

在您的页面中:

using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using System;
using Windows.Storage;
using Windows.Storage.Pickers;
using WinRT.Interop;

namespace FilePickerExample;

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        FileOpenPicker fileOpenPicker = new()
        {
            ViewMode = PickerViewMode.Thumbnail,
            FileTypeFilter = { ".jpg", ".jpeg", ".png", ".gif" },
        };

        nint windowHandle = WindowNative.GetWindowHandle(App.Window);
        InitializeWithWindow.Initialize(fileOpenPicker, windowHandle);

        StorageFile file = await fileOpenPicker.PickSingleFileAsync();

        if (file != null)
        {
            // Do something with the file.
        }
    }
}

Csharp相关问答推荐

在实际上是List T的 IESEARCH上多次调用First()是否不好?

使用GeneratedComInterfaceProperty的.NET 8 COM类对于VB 6/SYS或ALEViewer不可见

将委托传递到serviceccollection c#web API

System. InvalidOperationException:无法将数据库中的字符串值i转换为映射的ItemType枚举中的任何值''''

如何在Parall.ForEachAsync中使用CancerationTokenSource

需要在重新启动ApplicartionPool或IIS后启动/唤醒API的帮助

mocking对象的引发事件并作为用于调用方法的参数对象传递到那里

如何使用新的Microsoft.IdentityModel.JsonWebToken创建JwtSecurityToken?

从ASP.NET Core中的枚举字段填充 Select 选项时,将默认的第一个选项添加为 Select 元素

在具有不同属性名称的两个类之间创建关系

调用Task.Run()与DoSomethingAsync()有什么不同?

为什么AggregateException的Catch块不足以处理取消?

ASP.NET Core MVC将值从视图传递到控制器时出现问题

RabbitMQ群集的MassTransit配置问题

获取混淆&Quot;模糊引用&Quot;错误

C#LINQ延迟执行和嵌套方法

如何使用类似于[SELECT*FROM&Q;&Q;WHERE&Q;]SQL查询的System.Data.Entity创建查询?

如何解决System.StackOverflowException:抛出System.StackOverflowException类型的异常.&# 39;生成随机代码时发生异常?

实体框架允许您具有筛选的属性吗?

使用ImmutableList时,DynamicData未按预期工作