C#/AvaloniaUI - OpenFolderDialog

C#/AvaloniaUI - OpenFolderDialog

提问人:Venelin 提问时间:3/12/2020 更新时间:3/12/2020 访问量:2576

问:

我正在使用 AvaloniaUI,我正在尝试实现:http://avaloniaui.net/api/Avalonia.Controls/OpenFolderDialog/

我想实现的是当我按下一个按钮时,它会触发显示一个对话框,让我选择一个目录。一旦我选择了一个目录,我想将其路径存储在 .openFoldvar result

这是我的代码:

public async Task openFold()
{
    var dialog = new OpenFolderDialog();
    var result = await dialog.ShowAsync();

    if (result != null)
    {
        await openFold(result);
    }
    Trace.WriteLine("DIR IS: " + result);
}

但是我不知道如何将当前主窗口传递给.ShowAsync

我不确定即使我将当前窗口传递给它,它是否会显示一个选择目录对话框。我做对了吗?ShowAsync

c# WPF公司 阿瓦洛尼亚伊

评论

1赞 Zer0 3/12/2020
这在我看来是无限递归的。至于传递窗口,看起来它只是把它作为一个参数
0赞 Venelin 3/12/2020
@Zer0你能形成一个完整的答案吗?问题是如何让该参数将其传递到那里。

答:

3赞 Mike 3/12/2020 #1

我刚刚检查了一个 AvaloniaUI 应用程序,我在其中运行您的代码(除非您没有提供该方法的实现)。await openFold(result)

尽管如此,一切正常,我打开了文件夹选择窗口,我可以选择文件夹,然后返回。result

它既适用于给定的参数,也适用于不给定的参数,因为它是可选的。window

如果该方法是在类中定义的,则只需运行openFold()MainWindow
var result = await dialog.ShowAsync(this);

如果要将方法放在其他位置,请为主窗口创建一个静态访问器变量:

在构造函数中分配它:

并通过以下方式调用文件夹选择窗口:
public static MainWindow Instance;Instance = this;
var result = await dialog.ShowAsync(MainWindow.Instance);

还是我误解了你的问题?

评论

0赞 Venelin 3/14/2020
嘿@Mike你确定这也适用于 Linux 和 Mac 吗?
0赞 Mike 3/14/2020
我会试一试 - 我不确定,但是我没有明确地将任何特定于 Windows 的方法放在那里。