Resultados do comando

Anterior: adicionar comandos de nível superior à sua extensão

Um IInvokableCommand representa um único item acionável na Paleta de Comandos, é o que é disparado quando um usuário seleciona um comando.

Quando o comando é selecionado, o método Invoke é chamado. É aqui que você implementa a lógica para o que sua extensão deve fazer. O método Invoke deve retornar um CommandResult, que informa à Paleta de Comandos como responder após a execução do comando , por exemplo, se deve mostrar uma mensagem, abrir um arquivo ou não fazer nada.

Essa página explica os 7 tipos diferentes de CommandResult que podem ser retornados e o que cada um faz:

Observação

Há exemplos de código para os vários métodos CommandResult listados nesta página.

Resultado do comando KeepOpen

O comando KeepOpen resulta em não executar nenhuma ação. Ele deixa a paleta no seu estado atual, com a pilha de páginas e as consultas atuais. Isso pode ser útil para comandos que desejam manter o usuário na Paleta de Comandos, para continuar trabalhando com a página atual.

Observação

Mesmo ao retornar KeepOpen, iniciar um novo aplicativo ou janela a partir da Paleta de Comandos ocultará automaticamente a paleta quando a próxima janela ganhar foco.

Ocultar o resultado do comando

Esse resultado de comando mantém a página atual aberta, mas oculta a Paleta de Comandos. Isso pode ser útil para comandos que desejam tirar o usuário brevemente da Paleta de Comandos, mas depois voltar para esse contexto.

Resultado do comando GoBack

Esse resultado leva o usuário de volta a uma página na Paleta de Comandos e mantém a janela visível. Isso é perfeito para páginas de formulário, em que fazer o comando deve levá-lo de volta ao contexto anterior.

Resultado do comando GoHome

Esse resultado leva o usuário de volta à página principal da Paleta de Comandos. Ele deixará a Paleta visível (a menos que a paleta perca o foco). Considere usar isso para cenários em que você alterou seus comandos de nível superior.

Ignorar o resultado do comando

Esse resultado oculta a Paleta de Comandos depois que a ação é executada e a leva de volta para a home page. Na próxima inicialização, a Paleta de Comandos começará na página principal com uma consulta em branco. Isso é útil para comandos que são ações pontuais ou que não precisam manter a Paleta de Comandos aberta.

Se você não sabe mais o que usar, esse deve ser o seu padrão. O ideal é que os usuários entrem na paleta, encontrem o que precisam e terminem o que precisam fazer com ela.

Resultado do comando ShowToast

Esse resultado exibe uma mensagem transitória no nível da área de trabalho para o usuário. Isso é especialmente útil para exibir a confirmação de que uma ação ocorreu quando a paleta será fechada.

Considere o CopyTextCommand nos auxiliares - esse comando mostrará um aviso com o texto "Copiado para área de transferência" e, em seguida, descartará a paleta.

Por padrão, a função auxiliar CommandResult.ShowToast(string) terá um Resultado de CommandResult.Dismiss. No entanto, você pode alterar o resultado para qualquer um dos outros resultados, se desejar. Isso permite que você exiba um brinde e mantenha a paleta aberta, se desejar.

Confirmar o resultado do comando

Esse resultado exibe uma caixa de diálogo de confirmação para o usuário. Se o usuário confirmar a caixa de diálogo, o PrimaryCommand do ConfirmationArgs será executado.

Isso é útil para comandos que podem ter ações destrutivas ou que precisam confirmar a intenção do usuário.

Exemplo

Abaixo está uma página com um comando para cada tipo de CommandResult:

  1. Abrir /Pages/<ExtensionName>Page.cs
  2. Substitua GetItems pelo GetItems seguinte:

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" },
        ];
    }
}
  1. Implantar sua extensão
  2. Na paleta de comandos, Reload

Captura de tela da extensão com vários comandos para CommandResult

Avançar: Exibir conteúdo de markdown