创建文件或目录选择器的提示

文件或目录提示是一种简单的 UI 机制,用于提示用户选择文件或目录路径。 提示用户使用自定义对话框选项从本机 OS 创建文件对话框,以适应用户的特定方案。

处理文件或目录选取器提示

本文介绍以下使用文件或目录选取提示的方案:

提示用户选择要打开的单个文件

若要创建文件打开的提示符,请从 ShowOpenFileDialogAsync 对象调用该方法。

ShellExtensibility.ShowOpenFileDialogAsync()

ShowOpenFileDialogAsync 方法采用以下两种参数:

参数 类型 必选 DESCRIPTION
options FileDialogOptions 是的 定义用于自定义对话框的文件选取器提示选项。
cancellationToken CancellationToken 是的 异步操作的 CancellationToken。 触发时,提示将强制关闭。

如果用户关闭或取消对话框, ShowOpenFileDialogAsyncnull返回 。

示例:

下面的代码 Command 显示了具有默认对话框选项的文件提示。

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    FileDialogOptions options = new();
    string? filePath = await this.Extensibility.Shell().ShowOpenFileDialogAsync(options, cancellationToken);
}

提示用户选择要打开的一个或多个文件

在某些情况下,使用户能够一次选择多个文件非常有用,可以使用 ShowOpenMultipleFilesDialogAsync 此方法。

ShellExtensibility.ShowOpenMultipleFilesDialogAsync()

ShowOpenMultipleFilesDialogAsync 方法采用以下两种参数:

参数 类型 必选 DESCRIPTION
options FileDialogOptions 是的 定义用于自定义对话框的文件选取器提示选项。
cancellationToken CancellationToken 是的 异步操作的 CancellationToken。 触发时,提示将强制关闭。

如果用户关闭或取消对话框, ShowOpenMultipleFilesDialogAsyncnull返回 。

示例:

下面的代码 Command 显示了具有默认对话框选项的文件提示。

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    FileDialogOptions options = new();
    IReadOnlyList<string>? filePath = await this.Extensibility.Shell().ShowOpenMultipleFilesDialogAsync(options, cancellationToken);
}

提示用户选择要另存为的文件

提示用户输入文件名以使用 “另存为 ”选项保存,以便他们指定自定义文件名。

ShellExtensibility.ShowSaveAsFileDialogAsync()

ShowSaveAsFileDialogAsync 方法采用以下两种参数:

参数 类型 必选 DESCRIPTION
options FileDialogOptions 是的 定义用于自定义对话框的文件选取器提示选项。
cancellationToken CancellationToken 是的 异步操作的 CancellationToken。 触发时,提示将强制关闭。

如果用户关闭或取消对话框, ShowSaveAsFileDialogAsyncnull返回 。

示例:

下面的代码 Command 显示了具有默认对话框选项的文件提示。

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    FileDialogOptions options = new();
    string? filePath = await this.Extensibility.Shell().ShowSaveAsFileDialogAsync(options, cancellationToken);
}

提示用户选择要打开的目录

若要创建文件打开的提示符,请从 ShowOpenFolderDialogAsync 对象调用该方法。

ShellExtensibility.ShowOpenFolderDialogAsync()

ShowOpenFolderDialogAsync 方法采用以下两种参数:

参数 类型 必选 DESCRIPTION
options FolderDialogOptions 是的 定义用于自定义对话框的文件选取器提示选项。
cancellationToken CancellationToken 是的 异步操作的 CancellationToken。 触发时,提示将强制关闭。

如果用户关闭或取消对话框, ShowOpenFolderDialogAsyncnull返回 。

示例:

下面的代码 Command 显示了具有默认对话框选项的文件提示。

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    FolderDialogOptions options = new();
    string? folderPath = await this.Extensibility.Shell().ShowOpenFolderDialogAsync(options, cancellationToken);
}

使用选项自定义文件或目录提示

可以使用FileDialogOptionsDialogFiltersFolderDialogOptions类型来自定义提示。

文件对话框选项

资产 类型 必选 DESCRIPTION 示例
title string 对话框的标题。 如果标题是空字符串,则系统会使用默认标题,即 “另存为 ”或 “打开”。 默认值为 string.Empty “打开文件”
initialFileName string 对话框的输入框中的文件名。 对于打开的文件对话框,文件名必须存在,或者对话框返回错误。 如果传递了无效的文件名,则使用默认值。 默认值为 string.Empty “filename.ext”
filters DialogFilters 用于对话框的筛选器。 请参阅 包含自定义选项的提示示例

DialogFilters

术语 类型 必选 DESCRIPTION 示例:
Filters IReadOnlyCollection<DialogFilter> 是的 用于选择或保存文件的筛选器。 请参阅 包含自定义选项的提示示例
DefaultFilterIndex int 用于设置默认选择的筛选器的默认筛选器索引。 默认值为 0 最小索引是 0 ,最大值是 number of filters - 1

文件夹对话框选项

资产 类型 必选 DESCRIPTION 示例
title string 对话框的标题。 如果标题是空字符串,则系统会使用默认标题,即 “另存为 ”或 “打开”。 默认值为 string.Empty “打开文件”
initialDirectory string 对话框应打开的目录,该目录应该是绝对路径。 如果 initialDirectory 为空字符串,则初始目录默认为上次打开的目录。 如果没有以前打开的目录,则初始目录默认为根文件夹。 如果 initialDirectory 指定了标志,则会将标志传递到对话框以打开到指定的目录,而不是最后一个打开的目录。 如果传递了无效的目录,则使用默认值。 默认值为 string.Empty 路径/到/文件夹

包含自定义选项的提示示例

文件选取器提示

DialogFilter[] filters = new DialogFilter[]
{
    new DialogFilter("Word Files", ".doc", ".docx"),
    new DialogFilter("Excel Files", ".xls", ".xlsx"),
    new DialogFilter("All Files", ".*"),
};

FileDialogOptions options = new FileDialogOptions()
{
    Title = "Choose a File To Open".
    InitialDirectory = "absolute/path/to/file",
    InitialFileName = "file.txt",
    Filters = new DialogFilters(filters)
    {
        DefaultFilterIndex = 1,
    },
};

string? filePath = await Extensibilty.Shell().ShowOpenFileDialogAsync(options, cancellationToken);

目录选择器提示

FolderDialogOptions options = new FolderDialogOptions()
{
    Title = "Choose a Folder",
    InitialDirectory = "absolute/path/to/folder"
};

string? folderPath = await Extensibilty.Shell().ShowOpenFolderDialogAsync(options, cancellationToken);