[英]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.