命令结果

上一篇将顶级命令添加到扩展

IInvokableCommand 是命令面板中执行任务的基本单元。 当用户选择命令时,将调用 Invoke 方法,并在您的扩展中执行操作。 Invoke 方法返回一个 ICommandResult,这告诉命令面板在调用命令后要执行的动作。 此页面详细介绍了每种命令结果类型可能的情况。

该工具包提供了许多帮助程序方法来创建命令结果。 这些都是 CommandResult 类上的静态方法。 仅仅调用这些方法不会产生任何效果。 必须将这些对象作为 Invoke 方法的结果返回,命令面板才能处理这些对象。

注释

本页中列出的各种 CommandResult 方法都有代码示例。

KeepOpen 命令结果

KeepOpen 命令结果没有效果。 调色板保留在当前状态,同时保留当前页面堆栈和查询。 这对于希望将用户保留在命令面板中的命令非常有用,以便继续使用当前页。

注释

即使返回 KeepOpen,从命令面板启动新的应用或窗口也会自动隐藏下一个窗口接收焦点的调色板。

隐藏命令结果

此命令结果使当前页保持打开状态,但隐藏命令面板。 对于那些需要暂时将用户从命令面板中调出,随后又希望用户回到原上下文的命令,此功能十分有用。

GoBack 命令结果

此结果使用户返回命令面板中的页面,并使窗口保持可见。 对于表单页面,此功能尤为适用,因为执行命令后,用户应返回至之前的上下文。

GoHome 命令结果

此结果使用户返回到命令面板的主页。 这将使得调色板保持可见(除非调色板失去焦点)。 对于你已更改顶级命令的场景,请考虑使用此方法。

忽略命令结果

执行操作后,此结果隐藏命令面板,并将其带回主页。 在下一次启动时,命令面板将从主页开始,其中包含空白查询。 这对于一次性动作或无需保持命令面板打开的命令非常有用。

如果你不知道用什么,这应该是你的默认选择。 理想情况下,用户应进入调色板,找到所需的内容,然后完成任务。

ShowToast 命令结果

此结果向用户显示暂时性桌面级消息。 当调色板即将关闭时,这对于显示操作已完成的确认信息尤为有用。

考虑帮助程序中的 CopyTextCommand - 此命令将显示包含文本“已复制到剪贴板”的 Toast 弹出通知,然后关闭调色板。

默认情况下,CommandResult.ShowToast(string) 帮助程序将具有 CommandResult.Dismiss。 但是,您可以选择将结果更改为任意其他结果。 这样就可以显示 Toast 并让调色板保持打开状态(如果需要)。

确认命令结果

此结果向用户显示确认对话框。 如果用户确认对话框,则将执行 ConfirmationArgsPrimaryCommand

这对于可能具有破坏性作或需要确认用户意图的命令非常有用。

示例

例如,下面是一个页面,其中包含每种命令结果的一个命令:

注释

如果根据前面的部分进行操作,请将下面的代码从 CommandResultsPage 修改为 <ExtensionName>Page


using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;

internal sealed partial class CommandResultsPage : ListPage
{
    public CommandResultsPage()
    {
        Icon = IconHelpers.FromRelativePath("Assets\\StoreLogo.png");
        Title = "Example command results";
        Name = "Open";
    }

    public override IListItem[] GetItems()
    {
        ConfirmationArgs confirmArgs = new()
        {
            PrimaryCommand = new AnonymousCommand(
                () =>
                {
                    ToastStatusMessage t = new("The dialog was confirmed");
                    t.Show();
                })
            {
                Name = "Confirm",
                Result = CommandResult.KeepOpen(),
            },
            Title = "You can set a title for the dialog",
            Description = "Are you really sure you want to do the thing?",
        };

        return
        [
            new ListItem(new AnonymousCommand(null) { Result = CommandResult.KeepOpen() }) { Title = "Keep the palette open" },
            new ListItem(new AnonymousCommand(null) { Result = CommandResult.Hide() }) { Title = "Hide the palette" },
            new ListItem(new AnonymousCommand(null) { Result = CommandResult.GoBack() }) { Title = "Go back" },
            new ListItem(new AnonymousCommand(null) { Result = CommandResult.GoHome() }) { Title = "Go home" },
            new ListItem(new AnonymousCommand(null) { Result = CommandResult.Dismiss() }) { Title = "Dismiss the palette" },
            new ListItem(new AnonymousCommand(null) { Result = CommandResult.ShowToast("What's up") }) { Title = "Show a toast" },
            new ListItem(new AnonymousCommand(null) { Result = CommandResult.Confirm(confirmArgs) }) { Title = "Confirm something" },
        ];
    }
}

下一步: 显示 Markdown 内容