WINUI3 MainWindow获取

起因

        自己在MainWindow.xaml里自定义了两个page,通过导航的方式实现页面转换,然后在page的cs文件下定义函数。参考官方例子(WinUI3Gallery)写了一个文件夹选取函数,但是通过在Github查找源码,发现WindowHelper类是在程序内部定义的。。。直接抄过来不能用,然后为了解决获取当前窗口的问题被折磨了一整天。

解决办法

一、创建一个MainWindow静态变量

MianWindow类下新建一个静态变量,这样在需要获取MainWindow时直接调用MainWindow.mainWindow即可:

public sealed partial class MainWindow : Window
{
    public static MainWindow mainWindow;
    public MainWindow()
    {
        this.InitializeComponent();
        mainWindow = this;
    }
}

一个简单的文件夹选取函数,返回选取路径:

    public async Task<string> SelectPath()
    {
        FolderPicker folderPicker = new Windows.Storage.Pickers.FolderPicker();
        //获取句柄时使用静态变量
        var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(MainWindow.mainWindow);
        WinRT.Interop.InitializeWithWindow.Initialize(folderPicker, hwnd);
        folderPicker.FileTypeFilter.Add("*");
        StorageFolder folder = await folderPicker.PickSingleFolderAsync();
        if (folder != null)
            return folder.Path;
        return "NULL";
    }

二、新建一个MainWindow

不知道用起来会不会有其他问题,但能跑😂。

    public static async Task<string> SelectPath()
    {
        //新建一个MainWindow,用完之后关闭
        var window=new MainWindow();

        FolderPicker folderPicker = new Windows.Storage.Pickers.FolderPicker();
        var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(@this);
        WinRT.Interop.InitializeWithWindow.Initialize(folderPicker, hwnd);
        folderPicker.FileTypeFilter.Add("*");
        StorageFolder folder = await folderPicker.PickSingleFolderAsync();
        //不手动关闭的话,调试状态下即使关闭窗口也无法自动停止调试,说明依然占用着资源。
        window.Close();
        if (folder != null)
            return folder.Path;
        return "NULL";
    }

后言

顺便问一个问题,有没有哪位兄贵知道为什么Git了Winui3Gallery到本地之后依赖项全部带感叹号呀😭,甚至属性都是空的,感觉是路径设置有问题,但不知道咋改😥

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值