C#/AvaloniaUI - OpenFolderDialog

Posted

技术标签:

【中文标题】C#/AvaloniaUI - OpenFolderDialog【英文标题】: 【发布时间】:2020-06-23 20:53:40 【问题描述】:

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

我想要实现的是当我按下一个按钮并触发openFold 以显示一个让我选择目录的对话框。一旦我选择了一个目录,我想将它的路径存储在var 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,它也会显示一个选择目录对话框。我做得对吗?

【问题讨论】:

这在我看来是无限递归的。至于通过窗口,看起来只是把它当作parameter。 @Zer0 你能形成一个完整的答案吗?问题是如何让该参数传递到那里。 【参考方案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);

还是我误解了你的问题?

【讨论】:

嘿@Mike,你确定这也适用于 Linux 和 Mac 吗? 我会试一试 - 我不确定,但我明确没有在其中放置任何特定于 Windows 的方法。

以上是关于C#/AvaloniaUI - OpenFolderDialog的主要内容,如果未能解决你的问题,请参考以下文章

AvaloniaUI 之 Linux 常见问题

AvaloniaUI:全局捕获鼠标按钮向上/向下

AvaloniaUI 之 Linux

AvaloniaUI体验

AvaloniaUI 样式 - 伪类

.NET Core AvaloniaUI实现多语言国际化