繁体   English   中英

在尝试获取 window 处理程序时,如何在 WinUI3 中解决此 System.InvalidCastException?

[英]How do I solve this System.InvalidCastException in WinUI3 while trying to get the window handler?

我正在 WinUI 3 中开发一个应用程序,我需要打开一个文件夹选择器对话框。 为此,我访问了文档和 GitHub 页,这就是我写的内容 (PrincipalPage.xaml.cs):

(...)
private async void Select_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
{
    var task = SelectFile();
    await task;
}

public async Task SelectFile()
{
    var folderPicker = new FolderPicker();
    var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
    WinRT.Interop.InitializeWithWindow.Initialize(folderPicker, hwnd);
    folderPicker.FileTypeFilter.Add("*");
    var file = await folderPicker.PickSingleFolderAsync();
    storePath = file.Path;
    DestinationURLTextBox.Text = file.Path;
}
(...)

在此处输入图像描述

我试图找到我做错了什么,甚至试图将代码直接放在按钮点击方法下但没有任何改变。

这是外部配置还是...只是我做错了什么?

由于此代码位于Page (PrincipalPage.xaml.cs) 中,因此您将Page传递给GetWindowHandle 您需要传递一个Window

你可以这样做。

应用程序.xaml.cs

public partial class App : Application
{
    public Window? MainWindow { get; private set; }

    public App()
    {
        this.InitializeComponent();
    }

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

PrincipalPage.xaml.cs

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

    private async void Select_Click(object sender, RoutedEventArgs e)
    {
        var task = SelectFile();
        await task;
    }

    public async Task SelectFile()
    {
        var folderPicker = new FolderPicker();

        var mainWindow = (App.Current as App)?.MainWindow;
        var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(mainWindow);

        WinRT.Interop.InitializeWithWindow.Initialize(folderPicker, hwnd);
        folderPicker.FileTypeFilter.Add("*");
        var file = await folderPicker.PickSingleFolderAsync();
        storePath = file.Path;
        DestinationURLTextBox.Text = file.Path;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM