上一篇: 将顶级命令添加到扩展
IInvokableCommand 表示命令面板中的单个可操作项, 这是当用户选择命令时触发的项。
选择命令后,将调用 Invoke 方法。 这里是你实现扩展程序逻辑的地方。 Invoke 方法必须返回一个CommandResult,它告诉命令面板在命令运行后如何响应,例如,是显示一条消息、打开一个文件还是不执行任何操作。
本页介绍可返回的 7 种不同类型的内容以及每个类型 CommandResult 的作用:
注释
本页中列出的各种 CommandResult 方法都有代码示例。
KeepOpen 命令结果
命令 KeepOpen 结果不执行任何操作。 调色板保留在当前状态,同时保留当前页面堆栈和查询。 这对于希望将用户保留在命令面板中的命令非常有用,以便继续使用当前页。
注释
即使返回 KeepOpen,从命令面板启动新的应用或窗口也会自动隐藏下一个窗口接收焦点的调色板。
隐藏命令结果
此命令结果使当前页保持打开状态,但隐藏命令面板。 对于那些需要暂时将用户从命令面板中调出,随后又希望用户回到原上下文的命令,此功能十分有用。
GoBack 命令结果
此结果使用户返回命令面板中的页面,并使窗口保持可见。 对于表单页面,此功能尤为适用,因为执行命令后,用户应返回至之前的上下文。
GoHome 命令结果
此结果使用户返回到命令面板的主页。 这将使得调色板保持可见(除非调色板失去焦点)。 对于你已更改顶级命令的场景,请考虑使用此方法。
忽略命令结果
执行操作后,此结果隐藏命令面板,并将其带回主页。 在下一次启动时,命令面板将从主页开始,其中包含空白查询。 这对于一次性动作或无需保持命令面板打开的命令非常有用。
如果你不知道用什么,这应该是你的默认选择。 理想情况下,用户应进入调色板,找到所需的内容,然后完成任务。
ShowToast 命令结果
此结果向用户显示暂时性桌面级消息。 当调色板即将关闭时,这对于显示操作已完成的确认信息尤为有用。
考虑帮助程序中的 CopyTextCommand - 此命令将显示包含文本“已复制到剪贴板”的 Toast 弹出通知,然后关闭调色板。
默认情况下,CommandResult.ShowToast(string) 帮助程序将具有 CommandResult.Dismiss。 但是,您可以选择将结果更改为任意其他结果。 这样就可以显示 Toast 并让调色板保持打开状态(如果需要)。
确认命令结果
此结果向用户显示确认对话框。 如果用户确认该对话框,则会执行 PrimaryCommand 的 ConfirmationArgs。
这对于可能具有破坏性作或需要确认用户意图的命令非常有用。
示例
下面是包含每种类型命令的页面 CommandResult:
- 打开
/Pages/<ExtensionName>Page.cs - 将
GetItems替换为以下的GetItems。
using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;
internal sealed partial class <ExtensionName>Page : ListPage
{
public <ExtensionName>Page()
{
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" },
];
}
}
- 部署您的扩展
- 在命令面板中,
Reload